[转]关于java继承的private关键字问题

class A
{
public A()
{
System.out.println(
"aaaaaaaaa");
}
}
class B
{
public B()
{
System.out.println(
"bbbbbbbbbbb");
}
}
class Aa
{
private static A a=new A();
private static B b=new B();
public Aa()
{
System.out.println(
"111111111");
f();
}
private A aaa=new A();

private void f()
{
System.out.println(
"ffffffffff");
}
}
public class TestExtend extends Aa{
public TestExtend()
{
super();
System.out.println(
"subclass");
}
public static void main(String[] args)
{
TestExtend test
=new TestExtend();
}

}
输出:
aaaaaaaaa
bbbbbbbbbbb
aaaaaaaaa
111111111
ffffffffff
subclass

谁来解释下为什么运行结果是这样的?

一步一步分析.
1.从程序的入口开始.
程序先执行TestExtend test=new TestExtend();
这样就会调用TestExtend的构造方法.
public TestExtend()
{
super();
System.out.println("subclass");
}
你也看到了,这里调用super();换句话说是调用父类的构造方法.然后是打印"subclass".
那么程序会先进入父类中执行,最后才会打印"subclass".从这里就知道为什么"subclass"是最后打印出来的了.

2.进入到super()后.先会构造那些类的成员对象.然后是自己的构造方法.
这里静态的有2个a和b.而他们在构造的时候分别打印了"aaaaaaaaa"和"bbbbbbbbbbb";
还有一个aaa.所以会再打印一下"aaaaaaaaa";
这就是你看到前3个输出的结果.然后Aa 这时再构造它自己,这时打印出"111111111".然后它还调用了"f(); "方法.
f(); 方法中打印出了"ffffffffff"

以上就是整个的过程了.

from http://hi.baidu.com/danghj/blog/item/5e6f490fbc27402f6159f363.html

posted on 2011-05-23 11:34  MorningChen  阅读(1763)  评论(0编辑  收藏  举报

导航