public class TestVariable { public static void main(String[] args) { Base b = new Sub(); b.display(); } } class Base { int a = 1; public void display() { System.out.println(this.a); } } class Sub extends Base { int a = 2; // 如果注释 Sub 中的 display ,b.display()打印 1 ,否则打印 2 ,为什么? public void display() { System.out.println(this.a); } }
![]() | 1 n2l OP no body? |
2 yunhe8752 2023-11-13 11:42:28 +08:00 你 new 的是 sub ,那么你调用的对象就是 sub ,并且 sub 内的对象 this ,就是你调用的对象哇。 |
![]() | 3 n2l OP @yunhe8752 所以,如果注释 Sub 中的 display ,b.display()打印 1 ,否则打印 2 ,为什么? |
![]() | 4 zsdroid 2023-11-16 16:14:17 +08:00 因为继承啊,不懂你想问什么?对继承的概念不理解? |
![]() | 5 n2l OP @zsdroid 子类实例赋值给父类变量,父类中有个调用 int a 的 public display 方法,调用方式是 this.a ,如果子类中有一个同名 int a ,且没有重写 display 方法,那父类变量调用 display 方法后为什么返回父类中的 int a ,而不是子类中 int a ,我知道成员没有多态性,但是因为 display 方法内的调用方式是 this.a ,this 指的是实例对象即子类对象,那 this.a 为啥还是返回父类中的 int a ?仅仅凭着“成员变量没有多态”来解释这一切,感觉还是有点单薄啊 |