关于java继承中 子类访问父类属性的问题
java吧
全部回复
仅看楼主
level 6
我是一位java初学者,在继承中遇到一点问题不解,希望各位给我解答
class Father{
private String fathername;
public String getFatherName(){
return fathername;
}
public void setFatherName(String name){
fathername=name;
}
}
class Son extends Father{}
public class TestExtend{
public static void main(String[] args) {
Son s=new Son();
s.setFatherName("father");
System.out.println(s.getFatherName());
}
}
上例的输出结果为father
有一点我不明白的,子类Son继承了父类的方法,而父类中的private fields是不能够被继承的.
在main方法中,实例化了子类的对象,通过子类继承的父类方法,设置和访问父类的private fields,
因为只有子类被实例化了,父类的private String fathername 是存放在哪里的?
2012年07月25日 05点07分 1
level 16
java 规范中的“继承”概念,指的是:在子类中是否可以直接访问该资源
这些 private 的东西,还是在内存中存在的
只是你不能在子类中“直接访问”
2012年07月25日 05点07分 2
可是父类并没有被实例化呀
2012年07月25日 05点07分
@奔跑的小咩 子类构造时,会先对父类进行构造,就是初始化父类成员变量,调用父类构造方法,等等……
2012年07月25日 05点07分
2012年07月25日 05点07分
level 8
子类继承父类的一切,除了构造方法。。。
私有属性也被继承下来,只是没有访问权限。。
2012年07月25日 05点07分 3
你这样描述继承是违反 java 规范的
2012年07月25日 05点07分
@windsun_ul private fields是不继承的 oracle官方文档有明确的说法 而且自己也用反射去找过了,子类里没有父类的private filed和method
2012年07月25日 05点07分
@奔跑的小咩 oracle 官方文档的确定义 private 不被继承。但是你反射应该能看到的啊……
2012年07月25日 05点07分
A subclass does not inherit the private members of its parent class. However, if the superclass has public or protected methods for accessing its private fields, these can also be used by the subclass. (http://docs.oracle.com/javase/tutorial/java/IandI/subclasses.html)
2012年07月25日 05点07分
1