class fu
{
public int a;
public void fun()
{
System.out.println(a);
}
}
class zi extends fu
{
public static void main(String[] args) 
{
zi s=new zi();
s.fun();
}
}
//输出的结果是0,父类的a有默认值,是不是说明父类的对象也存在。

解决方案 »

  1.   

    子类的构造函数,隐含会率先调用父类的构造函数,而父类的构造函数会率先调用父类的父类的构造函数。
    以此类推,直到到Object的构造函数完成,再一层层的下来。换而言之,表述应该是,所有出现父类的地方,都一定可以用子类代替,反之不然。但是子类与父类并不是严格意义的包含关系。不能说,构造一个子类实例会创建父类对象,只能说需要用到父类的地方,都可以使用子类去替代它。
      

  2.   

    不能说明,a的值来自于子类的对象。
    由于子类继承了父类,因此子类中也会存在数据成员a(继承是这样体现的),而不是使用了父类定义的那个a。
      

  3.   

    不会的,java中只有使用new的时候才会创建一个复杂对象,你在new一个子类的时候,系统会调用子类的构造器,而在子类的构造器中又会隐式调用父类默认构造器super()(除非你显式地在子类的constructor中指定父类的构造器)。以此类推,会接连调用父类的构造器,直到object,object没有父类。然后依次调用下来。
    所以仅仅只是调用了父类的构造器,并没有创建父类的实例