[问题] 关于向上转型

楼主: DisdainU (茎茎濡吮汁)   2016-10-08 20:54:33
class 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()
那为什么例子中却可以执行出结果?
手机排版 请见谅
作者: v9290026 (CH)   2016-10-08 20:57:00
多型概念阿
作者: ssccg (23)   2016-10-08 21:14:00
看不到不等于不存在,Derived也是一个PrivateOverride当然也有f,从看的到f的地方呼叫(PrivateOverride的main)当然有
作者: pttworld (批踢踢世界)   2016-10-08 21:21:00
polymorphism and visibility, specification帮忙你。
作者: jackblack   2016-10-08 23:28:00
因为建立 Derived 实体时也会建立 PrivateOverride实体
作者: ripple0129 (perry tsai)   2016-10-09 00:44:00
我觉得这是实作与规格书岐义的点, 理论上不被继承事实是继承的, 但是有继承却不能够修改。网络有很多讨论吧, 大家对这部分也各有各的观点。
作者: ssccg (23)   2016-10-09 02:56:00
我觉得逻辑上和实作上都是当然会被继承的如果文件写private"不被继承"那是用字问题private internal protected friend这些都只是存取限制

Links booklink

Contact Us: admin [ a t ] ucptt.com