Java 父类与子类同名的成员变量

2018-05-24  本文已影响268人  一方乌鸦

先看个例子:

public class Test {
    public static void main(String[] args) {
        B b = new B();
        b.b();
    }
}
class A {
    String a = "a";
    A () {
        System.out.println("a this.a: " + this.a);
    }
    void visit() {
        System.out.println("this.getClass(): " + this.getClass());
    }
}
class B extends A {
    String a = "b";
    B() {
        System.out.println("b super.a: " + super.a);
        System.out.println("b this.a: " + this.a);
        System.out.println("super.equal(this): " + super.equals(this));
    }
    void b() {
        visit();
    }
}

打印的结果是:

a this.a: a
b super.a: a
b this.a: b
super.equal(this): true
this.getClass(): class B

结论:

  1. 成员变量不具有多态,子类与父类的相同描述的成员变量分开存储,互不干扰,也没有覆盖。如在父类中的 a 和子类中的 a ,即同一个对象的不同存储空间。
  2. 在调用父类构造器的时候,没有创建父类对象,只执行了一次 new 指令,用来创建子类对象。super这个关键字只不过是访问了这个空间特定部分的数据(也就是专门存储父类数据的内存部分)。
上一篇 下一篇

猜你喜欢

热点阅读