某些書本表明“子類只能繼承父類的非私有屬性和方法”润梯,然而事實(shí)并非如此垫卤,實(shí)際上“Java中子類可以繼承父類所有的屬性和方法”父丰,只不過因?yàn)樗接械脑蚋翁罚宇惒荒苷{(diào)用父類的私有方法。
//父類
public class Father {
private String name = "張三";//私有屬性
private String sex = "男";
public void tell(){
System.out.println("姓名:"+name);
System.out.println("性別:"+sex);
}
private void speak(){
System.out.println(name+"is speaking!");
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
}
//子類
public class Child extends Father {
}
//測試類
public class TestJava {
public static void main(String[] args) {
Child c = new Child();
c.tell();// tell方法是可以用的
// c.speak();//報(bào)錯(cuò)蛾扇,父類的私有方法不可見
}
}
可以看到測試類中即使沒有給Child類對象的屬性進(jìn)行賦值攘烛,tell方法依舊是可用的。如果Child類中沒有繼承父類的私有屬性镀首,那么tell方法應(yīng)該會(huì)報(bào)錯(cuò)坟漱。由此得出的結(jié)論是,子類會(huì)繼承父類的所有東西更哄,而修飾符只是影響屬性或者方法對外是否可見芋齿。
Java官方文檔的解釋:子類不能繼承父類的私有屬性,但是如果子類中公有的方法影響到了父類私有屬性成翩,那么私有屬性是能夠被子類使用的觅捆。