Java中的多态成员

在使用多态时当子父类(接口与实现)中的对应成员一样时

成员变量

成员函数

静态函数

1.成员变量

class fu{
     int num=3;
}
class zi extends fu{
     int num=5;
}
public class DuoTaiTest{
    public static void main(String[] args){
        fu F=new zi();
        System.out.println(F.num);
        zi Z=new zi();
        System.out.println(Z.num);
    }
}

运行结果:3/5

解释:编译时:找(对象)所属的类中(引用类型中/编译时没有对象)是否有这个变量——有:编译成功/没有——编译失败

           运行时:在引用类型中找这个变量

编译和运行都看等号左边

2.成员函数

public class DuoTaiTest{
    public static void main(String[] args){
        //成员变量测试
        fu F=new zi();
        System.out.println(F.num);
        zi Z=new zi();
        System.out.println(Z.num);
        //成员函数测试
        F.method();
        Z.method();
    }
}

运行结果:zi run/zi run

解释:编译时和变量编译相似,在所属的类(引用/在编译时没有对象)中找这个方法——有:编译成功/没有——编译失败

           执行时有区别:这里有一个函数的特性重写,menthod 在子类中已经被重写所以执行时执行子类中的方法

过程与成员变量差不多只是因为方法具有重写这个特性,而以子类的方法为主(重要原因:方法依赖于对象,数据结果不同

子类中重写了方法可能用到子类中的变量,所以以子类为主

重写:当子父类中有相同的方法时,子类是将父类的该方法重写

编译看等号左边运行看到等号右边

3.静态函数

public class DuoTaiTest{
    public static void main(String[] args){
        //成员变量测试
        fu F=new zi();
        System.out.println(F.num);
        zi Z=new zi();
        System.out.println(Z.num);
        //成员函数测试
        F.method();
        Z.method();
        //静态方法测试
        F.show();
    }

运行结果:fu run 

解释:编译与前面相似

          运行:静态方法与对象没有关系,所以依照成员变量的执行

编译和运行都看左边

总结:1.方法是动态绑定的到对象上——哪一个对象调用它,他就动态绑定那个对象(操作那个对象的数据)——通过

          2.静态方法是静态绑定在类上

          3.注意:静态方法一般是不用多态操作方法的——多态面对的是对象,而静态与对象无关

                            

猜你喜欢

转载自blog.csdn.net/stitch__/article/details/80381731