n2l
V2EX  ›  Java

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

  •  
  •   n2l · Nov 11, 2023 · 2657 views
    This topic created in 926 days ago, the information mentioned may be changed or developed.
    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 replies    2023-11-26 10:05:36 +08:00
    n2l
        1
    n2l  
    OP
       Nov 12, 2023
    no body?
    yunhe8752
        2
    yunhe8752  
       Nov 13, 2023
    你 new 的是 sub ,那么你调用的对象就是 sub ,并且 sub 内的对象 this ,就是你调用的对象哇。
    n2l
        3
    n2l  
    OP
       Nov 13, 2023
    @yunhe8752 所以,如果注释屌 Sub 中的 display ,b.display()打印 1 ,否则打印 2 ,为什么?
    zsdroid
        4
    zsdroid  
       Nov 16, 2023
    因为继承啊,不懂你想问什么?对继承的概念不理解?
    n2l
        5
    n2l  
    OP
       Nov 16, 2023
    @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
       Nov 16, 2023
    @n2l #5 感觉有点衔接会好些,但是不清楚这种“衔接”在哪里可以看到
    redocxz
        7
    redocxz  
       Nov 26, 2023
    @n2l 子类如果不重写 display 方法,你说的 this.a 就是 Base 类里面的 this.a ,不存在什么 ”this 指的是实例对象即子类对象,那 this.a 为啥还是返回父类中的 int a ?“
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   3036 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 44ms · UTC 15:02 · PVG 23:02 · LAX 08:02 · JFK 11:02
    ♥ Do have faith in what you're doing.