har*_*ish 9 java inheritance private-members
我已经读过子类不能继承私有字段或方法.但是,在这个例子中
class SuperClass {
private int n=3;
int getN() {
return n;
}
}
class SubClass extends SuperClass {
public static void main(String[] args) {
SubClass e = new SubClass();
System.out.println("n= " + e.getN());
}
}
Run Code Online (Sandbox Code Playgroud)
当我运行时,main
我得到输出为n=3
.这似乎SubClass
是继承了私有属性n
的SuperClass
.
所以,请解释这里发生了什么.谢谢.
您正在继承并使用该getn()
方法,该方法是包私有的,并且可以从子类获得(因为在这种情况下,两者本身都在同一个包中.)您无法n
直接访问,因为它是私有的.这getn()
是可以访问的方法,n
因为它与同一个类在同一个类中n
,并且您可以访问该getn()
方法,因为它不是私有的.
如果你这样做:
System.out.println("n= "+e.n+"");
Run Code Online (Sandbox Code Playgroud)
...代替当前行,然后由于上述原因无法编译.
通过setter/getter方法公开私有变量是完全正常的行为,这实际上就是你在这里所做的.不同之处在于,您可以在获取或设置变量时检查/限制/更改/记录/修改变量的值,并且可以在代码编译时进行重大更改.如果你只是公开一个字段并让人们直接访问它,你就不能这样做.
归档时间: |
|
查看次数: |
10691 次 |
最近记录: |