public class Test {
public static void main(String[] args) {
Test1 t = new Test1();
t.setStr("newstr");
t.setStr1("str1");
t.setStr0("newstr0");
System.out.println(t.getSql());
}
}
class Test0 {
private String str0 = "0";
private String str;
public String getSql() {
StringBuilder sql = new StringBuilder();
sql.append("-->" + str0+","+str);
return sql.toString();
}
public String getStr0() {
return str0;
}
public void setStr0(String str0) {
this.str0 = str0;
}
public String getStr() {
return str;
}
public void setStr(String str) {
this.str = str;
}
}
class Test1 extends Test0{
private String str;
private String str1;
public String getStr() {
return str;
}
public void setStr(String str) {
this.str = str;
}
public String getStr1() {
return str1;
}
public void setStr1(String str1) {
this.str1 = str1;
}
}
输出结果: -->newstr0,null
总结:以前没有特别注意,以为成员变量在子类中覆盖后,继承的父类方法中会自动获取当前子类中变量的值。
事实上不是这样。
方法中引用的成员变量,它的值只是方法所在类中赋的值,而不是子类中覆盖后的变量值。
子类覆盖后的成员变量,只属于子类。
大部分情况下,子类不需要覆盖父类的成员变量,直接继承就可以。