class Base
{
Base(){
System.out.println("Base constructer");
}
}class Test extends Base
{
Test(){
super();
System.out.println("Test constrcuter");
}
public static void main(String[] args){
Test t=new Test();
}
}请教一下,上面这个程序中,Test(){}中的super()是表示调用Base(),这个没错对吧,但是有一个问题我有点不明白:
Base类中的非静态方法必须要由Base实力化的对象才能引用,但是Base类并没有实力化对象啊,为什么Base类并没有实力化对象,而在Test(){}
中就能通过super()调用了基类的构造器了呢?

解决方案 »

  1.   

    楼主你的推断是对的,也就是说,只有实例化了后才能有机会调用够造函数,否则不可能调用的,楼上的几位回答的好象不对啊,关键原因是楼主你已经实力化了该对象 Test t=new Test();
    由于请问楼主,t属于不属于Base类!!
    当然属于.
    事实上,这样写,是一个好习惯: Base t = new Test();
    我们一般这样实例话一个对象.这样可以产生多态效果.就看看JAVA的基本语法规则,就明白了.
      

  2.   

    也就是说 t 属于Test当然也属于 Base ,所以会调用Base 的构造函数.