class father
{
private String name;
father(String name)
{
this.name=name;
}
public String get_name()
{
return this.name;
}
}
class son extends father
{
private String name;
son(String name)
{
super(name);
}
public String get_name()
{
return this.name;
}
}
public class TestDemo {
public static void main(String[] args)
{
son s=new son("son");
System.out.println(s.get_name());
}
}
运算结果:null
son初始化时调用父类的构造,给父类的name赋值,getname取的是自己的name,去掉子类的同名属性
把派生类的private String name;去掉,否则你赋值的不是基类的那个,而是完全不同的另一个变量。
son构造的时候是用的father的构造函数,所以是给father的name赋了值,son的name为null。如果你把son的name换个名字,并且把father的name声明为protected,那么可以返回“son”。
首先是private表示私有的,所以son和father都有自己的name属性
其次当没有给属性赋初值时,那么属性都是其对应的类型的默认值,所以father类和son类的对象的name属性默认值都是null
最后super,表示调用父类的构造函数,
通过上述的解释,可以知道son的name并没有初始化,所以是null,而super将father的name赋值为son