class Fu{int num=4;void show(){System.out.println("showFu");}}class Zi extends Fu{int num = 5;void show(){System.out.println("showZi");}}public class Test1{public static void main(String[] args){Fu f=new Zi();Zi z=new Zi(); System.out.println(f.num); *请问这个为什么打出来是4 System.out.println(z.num); f.show(); z.show();}}
2 回答

沧海一幻觉
TA贡献1824条经验 获得超5个赞
Fu f=new Zi();
因为f是Fu类型,所以看不到Z的成员。
如果是
System.out.println(((Z)f).num);
则输出5
成员变量没有“覆盖”一说。

斯蒂芬大帝
TA贡献1827条经验 获得超8个赞
在java中,通常属性是没有多态这个概念的,不仅是成员变量,还有静态方法。
意思就是,如果你这个num,是通过静态方法来获取的话,那么依旧是父类的静态方法来为你提供返回值,而不是子类
除了成员变量和静态方法以外,普通的方法,就是执行子类的方法了,如果你不想要父类的成员变量,想要子类的,那么可以通过子类的get方法来获取,前提是你要写了get、set方法23333
通过f.getNum()来获取子类的成员变量的值
希望能够帮助你理解~
添加回答
举报
0/150
提交
取消