请教一个简单的继承知识,子类通过super()修改父类属性。
下面两个程序,都是通过在子类的构造方法中调用 super() 传递字符串来改变父类的 String name;
我不太理解,为什么第二个程序把 system out 放在了main函数里,就会导致输出 f.name的值没有发生改变。
第一个程序:
class Father {
private String name;
Father(String name) {
this.name = name;
System.out.println(name);
}
}
class Son extends Father {
private String name;
Son(String fname, String sname) {
super(fname);
this.name = sname;
System.out.println(name);
}
}
public class AppTest {
public static void main(String[] args) {
Father f = new Father("奇异果");
Son s = new Son("大菠萝", "哈密瓜");
}
}
输出结果:
奇异果
大菠萝
哈密瓜
第二个程序:
class Father {
String name;
Father(String name) {
this.name = name;
//System.out.println(name);
}
}
class Son extends Father {
String name;
Son(String fname, String sname) {
super(fname);
this.name = sname;
//System.out.println(name);
}
}
public class AppTest {
public static void main(String[] args) {
Father f = new Father("奇异果");
System.out.println(f.name);
Son s = new Son("大菠萝", "哈密瓜");
System.out.println(f.name);
System.out.println(s.name);
}
}
输出结果:
奇异果
奇异果
哈密瓜