先看个例子:
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
结论:
- 成员变量不具有多态,子类与父类的相同描述的成员变量分开存储,互不干扰,也没有覆盖。如在父类中的
a
和子类中的a
,即同一个对象的不同存储空间。- 在调用父类构造器的时候,没有创建父类对象,只执行了一次
new
指令,用来创建子类对象。super这个关键字只不过是访问了这个空间特定部分的数据(也就是专门存储父类数据的内存部分)。
网友评论