您的位置:首页 > 编程语言 > Java开发

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

2011-05-23 11:34 507 查看
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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: