看代码说结果
-
public class Dervied extends Base {
-
private String name = "dervied";
-
public Dervied() {
-
tellName();
-
printName();
-
}
-
public void tellName() {
-
System.out.println("Dervied tell name: " + name);
-
}
-
public void printName() {
-
System.out.println("Dervied print name: " + name);
-
}
-
public static void main(String[] args){
-
new Dervied();
-
}
-
}
-
class Base {
-
private String name = "base";
-
public Base() {
-
tellName();
-
printName();
-
}
-
public void tellName() {
-
System.out.println("Base tell name: " + name);
-
}
-
public void printName() {
-
System.out.println("Base print name: " + name);
-
}
-
}
运行结果:
Dervied tell name: null
Dervied print name: null
Dervied tell name: dervied
Dervied print name: dervied
为什么会这样呢
并且无论修改Base的name为public还是protected,结果都是这样.
甚至代码改成这样,还是这个结果(Base类的name字段改成了basename)
-
public class Dervied extends Base {
-
private String name = "dervied";
-
public Dervied() {
-
tellName();
-
printName();
-
}
-
public void tellName() {
-
System.out.println("Dervied tell name: " + name);
-
}
-
public void printName() {
-
System.out.println("Dervied print name: " + name);
-
}
-
public static void main(String[] args){
-
new Dervied();
-
}
-
}
-
class Base {
-
public String basename = "base";
-
public Base() {
-
tellName();
-
printName();
-
}
-
public void tellName() {
-
System.out.println("Base tell name: " + basename);
-
}
-
public void printName() {
-
System.out.println("Base print name: " + basename);
-
}
-
}
后台一个大神一语道破
Base的构造函数中,调用的两个方法tellName和printName,因为继承的原因,应该执行的是子类的方法,而子类此时还没有初始化这个数据成员,所以显示为null.
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/29254281/viewspace-1784890/
,如需转载,请注明出处,否则将追究法律责任。