java – 成员变量的多态.我知道这是不可能的,我不明白这个具体情
我知道这个行为,但我不是100%肯定为什么会发生这种情况.
我知道在 java中没有实例变量的多态.变量由编译器静态解析. 但在下面我很困惑: class Animal{ String name = "Animal"; public void display(){ System.out.println("My name is "+ name); } } public class Dog extends Animal { String name = "Dog"; public static void main(String[] args) { Animal a = new Dog(); Dog d = new Dog(); System.out.println(a.name);//Line 1 a.display();//Line 2 d.display();//Line 3 } } 我承诺在第1行它将显示动物,因为它是静态类型(由编译器解决). 更新: @Razvan和@LouisWasserman的答案一直很有帮助. 到目前为止还好但是这些点如何与如下修改display()一样呢? class Animal{ String name = "Animal"; public void display(){ System.out.println("Current class is "+ this.getClass().getName()); System.out.println("My name is "+ name); } } 那么结果如下: Dog d = new Dog(); d.display();
我期待这个展示内容将是动物,因为我明白了这里的答案.但不是.为什么? 解决方法
当您调用d.display()时,将调用Animal.display(),因为您不要在Dog类中覆盖它.
所以Dog.display()的想象实现将是这样的: public void display(){ super.display(); } 而Animal.display()的实现是: public void display(){ System.out.println("My name is "+ this.name); //<-- note the this } Animal.display()方法甚至不知道存在一个对象Dog,因此它的名称变量 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |