子类构造参数第一行一定是调用父类的构造函数,如果不写,默认调用的是父类的无参构造方法,即super()
,如果父类不存在无参构造方法,则会触发编译错误。
解决思路很显然就是:
- 为父类添加无参构造函数
- 在子类中通过
super
指定构造函数的参数(而不是试图调用父类的getter或setter函数,因为这些函数很有可能会被子类重写,导致一个“构造函数中存在可覆盖的方法调用”警告)
public class people {
public static void main(String[] args) {
student s = new student("Tom", 18);
s.sayHello();
}
}
class Person {
private String name;
private int age;
public Person(String name, int age) {
this.name = name;
this.age = age;
}
public String getName() {
return this.name;
}
public int getAge() {
return this.age;
}
public void setName(String name) {
this.name = name;
}
public void setAge(int age) {
this.age = age;
}
public void sayHello() {
System.out.println("person.run");
}
}
class student extends Person {
/* public student() {
super("Tom", 18);
} */
public student(String name,int age){ //任何class的构造方法,第一行语句必须是调用父类的构造方法
super(name,age);
}
@Override
public void sayHello() {
System.out.println("student.run");
}
}