调用父类的构造器**
(1)子类不会获得父类的构造器,但子类构造器可以调用父类构造器的初始化代码,类似于一个构造器调用另一个重载的构造器
(2)在一个构造器调用另一个构造器用this完成,在子类构造器中调用父类构造器用super完成。
——————————————————————————————————————————————————————————————————————
调用父类构造器示例代码:
class Base
{
public double size;
public String name;
//定义构造器
public Base(double size,String name) //构造器无返回值,无void
{
this.size=size;
this.name=name;
}
}
public class Sub extends Base
{
public String color;
//子类构造器
public Sub(double size,String name,String color)
{
//通过super来调用父类构造器初始化过程
super(size,name); //必须出现在子类执行体的第一行‘’
this.color=color;
}
public static void main(String[] args)
{
Sub s = new Sub(99.0,"zou","红色");
System.out.println(s.size+s.size+s.name);
}
}
如上继承树所示,如果创建ClassB的对象,系统将先执行java.lang.Object构造器,再执行ClassA的构造器,再执行ClassB的构造器
——————————————————————————————————————————————————————————————————————————
下面定义了三个雷,有着严格的继承关系,通过这种关系可以看到构造器之间的调用关系。
class Creature
{
//定义构造器
public Creature(){
System.out.println(“Creature无参数的构造器”);
}
}
class Animal extends Creature
{
public Animal(String name){
System.out.println(“Animal自带参数的构造器:”+”该动物的name为:”+name);
}
public Animal(String name,int age){ //重载的构造器:名字相同,参数不同
//使用this调用同一个重载的构造器
this(name);
System.out.println(“Aniaml带两个参数的构造器”+”其age为”+age);
}
}
public class Wolf extends Animal
{
public Wolf()
{
//显示调用父类有两个参数的构造器
super(“喜洋洋”,3);
System.out.println(“Wof无参数的构造器”);
}
public static void main(String[] args)
{
new Worf();
}
}