V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
n2l
V2EX  ›  Java

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

  •  
  •   n2l · 169 天前 · 451 次点击
    这是一个创建于 169 天前的主题,其中的信息可能已经有所发展或是发生改变。
    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);
        }
    }
    
    7 条回复    2023-11-26 10:05:36 +08:00
    n2l
        1
    n2l  
    OP
       168 天前
    no body?
    yunhe8752
        2
    yunhe8752  
       167 天前
    你 new 的是 sub ,那么你调用的对象就是 sub ,并且 sub 内的对象 this ,就是你调用的对象哇。
    n2l
        3
    n2l  
    OP
       167 天前
    @yunhe8752 所以,如果注释屌 Sub 中的 display ,b.display()打印 1 ,否则打印 2 ,为什么?
    zsdroid
        4
    zsdroid  
       164 天前
    因为继承啊,不懂你想问什么?对继承的概念不理解?
    n2l
        5
    n2l  
    OP
       164 天前
    @zsdroid 子类实例赋值给父类变量,父类中有个调用 int a 的 public display 方法,调用方式是 this.a ,如果子类中有一个同名 int a ,且没有重写 display 方法,那父类变量调用 display 方法后为什么返回父类中的 int a ,而不是子类中 int a ,我知道成员没有多态性,但是因为 display 方法内的调用方式是 this.a ,this 指的是实例对象即子类对象,那 this.a 为啥还是返回父类中的 int a ?仅仅凭着“成员变量没有多态”来解释这一切,感觉还是有点单薄啊
    n2l
        6
    n2l  
    OP
       164 天前
    @n2l #5 感觉有点衔接会好些,但是不清楚这种“衔接”在哪里可以看到
    redocxz
        7
    redocxz  
       154 天前
    @n2l 子类如果不重写 display 方法,你说的 this.a 就是 Base 类里面的 this.a ,不存在什么 ”this 指的是实例对象即子类对象,那 this.a 为啥还是返回父类中的 int a ?“
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   2475 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 27ms · UTC 15:57 · PVG 23:57 · LAX 08:57 · JFK 11:57
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.