对JAVA中private的一点看法,高手请进!
JAVA中当成员声明为private时子类不能继承这是一个常识。但看下面代码我有点疑惑!class Foo2{
protected class Bar{
protected Bar(){
System.out.println("Foo2.bar");
}
}
private Bar b;
Foo2(){
System.out.println("Foo");
b=this.new Bar();
}
}
public class FooToo1 extends Foo2{
protected class Bar{
protected Bar(){
System.out.println("Footoo.bar");
}
}
public static void main(String[] args){
new FooToo1();
}
}
我们可以看见在Foo2中有private的成员b当我们通过FooToo1继承Foo2,并在MAIN中实例化FOOTOO1运行的结果是
Foo
Foo2.bar产生这样的结果是FOOTOO1的构造函数引用父类构造函数注意父类构造函数中
b=this.new Bar();
这个时候实例BAR再引用BAR构造函数写出Foo2.bar这里奇怪的是在FOOTOO1中应该没有B因为它是父类的私有成员。出现这样的结果我想只能是1、在实例化子类时先实例化父类通过父类的无参数构造函数,那么也可以说在实例化FOOTOO1时其父类FOO2实际上已经隐藏的实例化了。2、可能FOOTOO1已经继承了B只是它是父类私有的在FOOTOO1中没有任何办法访问它。
我个人比较倾向于第一种看法。希望高手指点,和大家探讨!