我遇到了一个让我很困惑的问题,就是关键字'super',我的测试代码是这样的:
package test;
public class Parent {
private String name;
public Parent(){
this.name = "parent";
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public void showName(){
System.out.println(this.name);
}
}
public class Child extends Parent{
public Child(){
this.setName("Child");
}
public void showName(){
System.out.println(super.getClass().toString());
System.out.println(super.toString());
super.showName();
System.out.println(super.getName());
}
}
public class Test {
public static void main(String[] args) {
Child d = new Child();
d.showName();
}
}
所以结果是这样的:
class test.Child
test.Child@2207d8bb
Child
Child
我对'super'的理解是它是对当前实例的父实例的引用,所以我期望的输出就像'Parent',从结果来看,我错了,它就像当前实例调用父方法,并且' super' 不是父实例,我的理解对吗?有没有办法让父实例只初始化子类?