继承成员变量和继承方法的疑问

2023-11-11 21:52:50 +08:00
 n2l
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);
    }
}
688 次点击
所在节点    Java
7 条回复
n2l
2023-11-12 15:59:25 +08:00
no body?
yunhe8752
2023-11-13 11:42:28 +08:00
你 new 的是 sub ,那么你调用的对象就是 sub ,并且 sub 内的对象 this ,就是你调用的对象哇。
n2l
2023-11-13 12:00:36 +08:00
@yunhe8752 所以,如果注释屌 Sub 中的 display ,b.display()打印 1 ,否则打印 2 ,为什么?
zsdroid
2023-11-16 16:14:17 +08:00
因为继承啊,不懂你想问什么?对继承的概念不理解?
n2l
2023-11-16 16:39:22 +08:00
@zsdroid 子类实例赋值给父类变量,父类中有个调用 int a 的 public display 方法,调用方式是 this.a ,如果子类中有一个同名 int a ,且没有重写 display 方法,那父类变量调用 display 方法后为什么返回父类中的 int a ,而不是子类中 int a ,我知道成员没有多态性,但是因为 display 方法内的调用方式是 this.a ,this 指的是实例对象即子类对象,那 this.a 为啥还是返回父类中的 int a ?仅仅凭着“成员变量没有多态”来解释这一切,感觉还是有点单薄啊
n2l
2023-11-16 16:41:58 +08:00
@n2l #5 感觉有点衔接会好些,但是不清楚这种“衔接”在哪里可以看到
redocxz
2023-11-26 10:05:36 +08:00
@n2l 子类如果不重写 display 方法,你说的 this.a 就是 Base 类里面的 this.a ,不存在什么 ”this 指的是实例对象即子类对象,那 this.a 为啥还是返回父类中的 int a ?“

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/991031

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX