子类的构造方法
子类可以继承父类的除构造方法和析构方法以外的所有成员,在子类创建对象时,必须对父类的变量进行初始化。但构造方法是不被继承的,故要在子类当中调用父类的构造方法。
如果子类中没有显式调用父类的构造方法,Java默认调用父类无参数的构造方法。若父类没有不带参的构造方法,将出错。
本篇介绍继承时子类的构造方法。
1、 使用super()调用父类的构造方法
在子类中,可以使用“super引用”调用父类的构造方法。
其语法格式如下:
super([参数列表])
例如:在Student类中,其继承自Person类,其构造方法可声明如下:
public Student(){
super();//此处可省,调用父类无参数构造方法
number=123;
}
public Student(String name,int number){
super(name);//调用父类带参数构造方法
this.number=number;
}
2、 默认执行super()
有两种情况,Java会默认执行super。
(1) 当一个类没有声明构造方法时,Java为该类提供默认的构造方法,可默认调用父类super() 。
例:
class A{
int i;
public A(){
i=1;
}
public int getI(){
return i;
}
}
public class Add extends A{
public static void main(String args[]){
Add a=new Add();
System.out.print(a.getI());
}
}
此运行结果为:1。
本例中,Add类继承自A类,在A类中有构造方法A()不带参。在子类Add中,并没有构造方法,此时在创建Add的对象时,会自动调用super()不带参的构造方法,使i的值初始化为1,故输出为1。
(2) 如果子类的构造方法没有调用super()或this(),Java将默认执行super()。
例:
class A{
int i;
public A(){
i=1;
}
public int getI(){
return i;
}
}
//类Add,继承类A
public class Add extends A{
int j;
public Add(){
j=3;
}
public static void main(String args[]){
Add a=new Add();
System.out.print(a.getI()+""+a.j);
}
}
例:
class Person{
private String name;
public Person(){
this("张熹熹");
}
public Person(String name){
this.name=name;
}
publicvoid show(){
System.out.println("姓名:"+name);
}
}
public class Student extends Person{
private String number;
public Student(){
number="123";//默认调用父类的Person()
}
public Student(Stringnumber){
super();//调用父类的不带参构造方法
this.number=number;
}
public Student(Stringname,String number){
super(name);//调用父类带参的构造方法
this.number=number;
}
public void show(){//覆盖父类的方法
super.show();//调用父类的方法
System.out.println("学号:"+number);
}
public static void main(String args[]){
Student s1=new Student();
s1.show();
Student s2=new Student("645");
s2.show();
Student s=new Student("Lay","107");
s.show();
}
}
其运行结果为:
姓名:张熹熹
学号:123
姓名:张熹熹
学号:645
姓名:Lay
学号:107
