楼主:
DisdainU (茎茎濡吮汁)
2016-10-08 20:54:33class Derived extends PrivateOverride{}
public class PrivateOverride{
private void f(){
System.out.println("private f()");
}
public static void main(String[] args){
PrivateOverride p=new Derived();
p.f();
}
}
/* output:
private f()
*/
想问的是 既然base class的f()是private
也就代表在Derived中看不到f()
那为什么例子中却可以执行出结果?
手机排版 请见谅
作者:
ssccg (23)
2016-10-08 21:14:00看不到不等于不存在,Derived也是一个PrivateOverride当然也有f,从看的到f的地方呼叫(PrivateOverride的main)当然有
作者:
pttworld (批踢踢世界)
2016-10-08 21:21:00polymorphism and visibility, specification帮忙你。
因为建立 Derived 实体时也会建立 PrivateOverride实体
我觉得这是实作与规格书岐义的点, 理论上不被继承事实是继承的, 但是有继承却不能够修改。网络有很多讨论吧, 大家对这部分也各有各的观点。
作者:
ssccg (23)
2016-10-09 02:56:00我觉得逻辑上和实作上都是当然会被继承的如果文件写private"不被继承"那是用字问题private internal protected friend这些都只是存取限制