在使用多态时当子父类(接口与实现)中的对应成员一样时
成员变量
成员函数
静态函数
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.注意:静态方法一般是不用多态操作方法的——多态面对的是对象,而静态与对象无关