关于多态属性的调用问题

  • 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();
  • }
  • }






一只斗牛犬
浏览 599回答 2
2回答

沧海一幻觉

Fu f=new Zi();因为f是Fu类型,所以看不到Z的成员。如果是System.out.println(((Z)f).num); 则输出5成员变量没有“覆盖”一说。

斯蒂芬大帝

在java中,通常属性是没有多态这个概念的,不仅是成员变量,还有静态方法。意思就是,如果你这个num,是通过静态方法来获取的话,那么依旧是父类的静态方法来为你提供返回值,而不是子类除了成员变量和静态方法以外,普通的方法,就是执行子类的方法了,如果你不想要父类的成员变量,想要子类的,那么可以通过子类的get方法来获取,前提是你要写了get、set方法23333通过f.getNum()来获取子类的成员变量的值希望能够帮助你理解~
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java