[转]关于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
相关文章推荐
- 关于java静态方法继承问题
- 关于C++的private继承问题
- 关于c++中的public继承,private继承,以及protect继承的问题
- 关于java继承和多态的问题
- private和public关键字关于对象的访问权限问题
- 关于类的虚函数的public,private的继承问题。
- 关于java内部类的继承的一个小问题
- java中关于继承的问题
- Java-关于子类是否继承了父类的private实例变量
- java继承时候关于父类中的静态方法的问题
- java中关于类的封装与继承,this、super关键字的使用
- Java中关于多重继承的问题
- 关于Java中子类能否继承和重写父类的静态方法问题
- java 继承、抽象、private、static、final关键字在类中的使用
- 关于java中继承多接口实现其中同名方法的问题
- OC学习中关于@private@protected@pakege@public的访问权限和继承问题
- 关于Java继承一个值得思考的问题。
- JAVA 关于UltraEdit 关键字颜色显示的问题
- 关于java标识符,关键字,保留字的一些问题
- JAVA中关于继承和隐藏的一个另类问题。