当实现类之间继承的时候,子类继承父类的所有变量和方法,但子类不继承父类的构造函数,但子类可以调用父类的构造函数,用super。如果给父类定义了有参数的构造函数,则子类必须声明子类的构造函数,如果不声明就会出错的(一句话:若父类声明了自己的构造函数,而子类不声明构造函数,就会出错。因为子类会默认生成无参构造函数,无参构造函数会调用父类的无参构造函数,但是父类没有默认的无参构造函数,就会出错啦)。所以一般情况下为避免此种情况的发生,有两种方法:
1.把父类系统默认的那个无参构造函数也声明出来。
2.在子类中声明构造函数,并用super方法调用父类的构造函数。
也就是
如:public class Person{
public String name;
public int age;
public Person(){ //加上
}
public Person(String name,int age){ //定义了自己的有参数的构造函数(java可以有多个构造函数)
this.name=name;
this.age=age;
}
public void getInf(){
System.out.println("My name is zhangsan!");
}
}
public class Student extends Person{
public String school;
public Student(){ //你如果不写此构造函数的话,此构造函数是系统默认生成的,他会自动调用父类Person的默认无参构造函数,但此时
} //父类的默认无参构造函数不存在(若写自己的构造函数,则默认的构造函数就不存在了),则会报错,所以此时应该手 //动的将无参构造函数也加上去(如上)。或者用super调用,如:最下面一段代码:
}
如:public Student(){
super("zhangsan",20);
}