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

184 天前
 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);
    }
}
474 次点击
所在节点    Java
7 条回复
n2l
183 天前
no body?
yunhe8752
182 天前
你 new 的是 sub ,那么你调用的对象就是 sub ,并且 sub 内的对象 this ,就是你调用的对象哇。
n2l
182 天前
@yunhe8752 所以,如果注释屌 Sub 中的 display ,b.display()打印 1 ,否则打印 2 ,为什么?
zsdroid
179 天前
因为继承啊,不懂你想问什么?对继承的概念不理解?
n2l
179 天前
@zsdroid 子类实例赋值给父类变量,父类中有个调用 int a 的 public display 方法,调用方式是 this.a ,如果子类中有一个同名 int a ,且没有重写 display 方法,那父类变量调用 display 方法后为什么返回父类中的 int a ,而不是子类中 int a ,我知道成员没有多态性,但是因为 display 方法内的调用方式是 this.a ,this 指的是实例对象即子类对象,那 this.a 为啥还是返回父类中的 int a ?仅仅凭着“成员变量没有多态”来解释这一切,感觉还是有点单薄啊
n2l
179 天前
@n2l #5 感觉有点衔接会好些,但是不清楚这种“衔接”在哪里可以看到
redocxz
169 天前
@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