java基础

java中的多态

2019-02-25  本文已影响0人  小漫画ing

多态的概述

package cn.manman.com;
class fu{
    public int num=100;
    
}
class zi extends fu{
    public int num2=1000;
    public int num=20;
}
public class duotai {
    public static void main(String[] args) {
        fu f=new zi();
        System.out.println(f.num);
        System.out.println(f.num2);
        
    }
}

这样是编译不成功的,因为多态的访问特点,看左边,是父类继承子类,这里f调用num2 的时候会报错(如下图),因为父类里面并没有num2这个变量;


报错图
package cn.manman.com;
class fu1{
    public int num=100;
    
}
class zi1 extends fu1{
    public int num2=1000;
    public int num=20;
}
public class duotai {
    public static void main(String[] args) {
        fu1 f1=new zi1();
        System.out.println(f1.num);
        //System.out.println(f1.num2);
        
    }
}

我现在将最后一行注释掉,运行结果如下:


image.png
package cn.manman.com;
class fu1{
    public int num=100;
    public void show(){
        System.out.println("show fu");
    }
    
}
class zi1 extends fu1{
    public int num2=1000;
    public int num=20;
    public void show(){
        System.out.println("shou zi");
    }
    public void method(){
        System.out.println("method zi");
    }
}
public class duotai {
    public static void main(String[] args) {
        fu1 f1=new zi1();
        System.out.println(f1.num);
        //System.out.println(f1.num2);
        f1.show();
        f1.method();
    }
}

这段代码其实和上面一样也是有错误的,因为父类里面是没有method方法的,所以编译是通不过的;


错误图示
package cn.manman.com;
class fu1{
    public int num=100;
    public void show(){
        System.out.println("show fu");
    }
    
}
class zi1 extends fu1{
    public int num2=1000;
    public int num=20;
    public void show(){
        System.out.println("shou zi");
    }
    public void method(){
        System.out.println("method zi");
    }
}
public class duotai {
    public static void main(String[] args) {
        fu1 f1=new zi1();
        System.out.println(f1.num);
        //System.out.println(f1.num2);
        f1.show();
        //f1.method();
    }
}

但是我现在吧最后一行注释掉了,我们再来看看结果:


成员方法

结果是show zi,所以存在一个方法的重写;但是除了静态的方法:


package cn.manman.com;
class fu1{
    public int num=100;
    public void show(){
        System.out.println("show fu");
    }
    public static void function(){
        System.out.println("function fu");
    }
    
}
class zi1 extends fu1{
    public int num2=1000;
    public int num=20;
    public void show(){
        System.out.println("shou zi");
    }
    public void method(){
        System.out.println("method zi");
    }
    public static void function(){
        System.out.println("function zi");
    }
}
public class duotai {
    public static void main(String[] args) {
        fu1 f1=new zi1();
        System.out.println(f1.num);
        //System.out.println(f1.num2);
        f1.show();
        //f1.method();
        f1.function();
    }
}

静态方法

多态中的弊端

package cn.manman.com;
class fu1{
    public int num=100;
    public void show(){
        System.out.println("show fu");
    }
    public static void function(){
        System.out.println("function fu");
    }
    
}
class zi1 extends fu1{
    public int num2=1000;
    public int num=20;
    public void show(){
        System.out.println("shou zi");
    }
    public void method(){
        System.out.println("method zi");
    }
    public static void function(){
        System.out.println("function zi");
    }
}
public class duotai {
    public static void main(String[] args) {
        fu1 f1=new zi1();
        System.out.println(f1.num);
        //System.out.println(f1.num2);
        f1.show();
        //f1.method();
        f1.function();
        zi1 z=(zi1)f1;
        z.method();
    }
}

转型

这样就可以访问method的方法了。

上一篇 下一篇

猜你喜欢

热点阅读