本帖最后由 罗利民 于 2012-1-4 14:29 编辑
子类继承了父类,其实在new成功一个子类的时候,堆里的那个子类对象里面包含了一个父类对象,因此子类实例里不需声明和定义就可以用父类的方法和属性
反过来想,既然子类的实例对象里包含了父类实例对象,子类继承父类,那肯定是要在构造子类的时候先构造父类,所以在子类的构造函数里会有隐式的super();没有这句是造不出子类的。
例如:
class A
{
int weight;
int depth;
A() // 加了这段编译就成功,否则就失败
{
weight=depth=-1;
}
A(int w,int d)
{
this.weight=w;
this.depth=d;
}
A(int len)
{
weight=depth=len;
}
}
class B extends A
{
int height;
B(int w,int d,int h)
{//隐式的调用A();创建父类实例对象
super.weight=w; //创建的父类的实例对象,才可以用实例变量weight
super.depth=d;
height=h;
}
}
public class test2
{
public static void main(String args[])
{
B b=new B(1,2,3);
System.out.println(b.weight+b.height+b.depth);
}
} |