日期:2014-05-20  浏览次数:20779 次

关于类构造函数的继承关系疑惑?
学习中,遇到了个问题,为什么   子类对象不仅会实现子类的构造函数方法,还会向上实现父类的构造函数?JAVA   API文档不是记载,类的构造函数没有任何返回类型,并不属于类的成员方法。因此当子类继承父类时,如何又将父类的构造函数复制到子类里面呢?谢谢

------解决方案--------------------
“子类对象不仅会实现子类的构造函数方法,还会向上实现父类的构造函数”。

这句话是胡说八道,写这句话的人是误人子弟。

子类继承父类中可继承的属性和方法。构造函数是不能被继承的。这是肯定的。

之所以出现上面的胡说八道的话,是因为对一个概念的混淆。

当创建一个子类的实例的时候,父类的构造函数会被显式或隐式的调用。

调用跟继承自然是不一样的。

举个例子吧:

class Animal {
Animal() {
System.out.println( "Animal Constructor. ");
}
}

class Dog extends Animal {
Dog() {
System.out.println( "Dog Constructor. ");
}
}

在程序中创建一个Dog实例的时候,也就是Dog d = new Dog();的时候,会有如下结果:
Animal Constructor.
Dog Constructor.

为啥呢?因为上面的Dog Constructor会被改写成:
Dog() {
super();
System.out.println( "Dog Constructor. ");
}

super()就是调用了父类的构造函数,这句是编译器自动(隐式)的加入的。

要想详细的了解构造函数,还是读书吧,这里就不想细说了。
------解决方案--------------------
子类继承了基类的的所有成员和方法(非private)。。。
在子类创建对象的时候并不仅仅是创建了一个对像,他还会涉及到基类,当你创建一个之类对象时这个对象里面还含有一个基类的子对象,就像包裹在子类里面一样。而这个时候为了让基类能正确地初始化只有一个方法就是调用基类的构造函数来进行初始化,因此java会在子类创建对象的时候自动地调用基类的构造函数进行初始化!

你从上面这段去理解应该会比较容易明白~