当一个类被另一个类继承时,
实例化子类必先实例化父类,
若不指定子类创建实例时会自动调用super()方法,也就是父类的无参构造方法。
所以你要想删除父类中的无参构造方法只有通过两种方式:
1.删除掉子类中的所有调用super()的构造方法,未声明的就是默认调用,例如你的无参构造方法
2.在子类的构造方法中声明调用父类的有参构造方法例如Student中的super(n,s)
但是一般都要写一个无参方法 以为很多插件例如Hibernate 他就会去调用你的无参方法创建实例,如果你的类中没有无参方法Hibernate 就无法帮你创建实例
class Person {
String name;
char sex;
Person(String n, char s) {
name = n;
sex = s;
}
void show() {
System.out.println("nameis" + name + ",sexis" + sex);
}
}
class Student extends Person {
int number;
Student(String n, char s, int num) {
super(n, s); //删除子类中的无参构造方法 并指定该子类的构造方法去调用父类中指定的构造方法,让JVM不去调用无参方法
this.number = num;
}
void show() {
System.out.println("nameis" + name + ",sexis" + sex + ",numberis"
+ number);
}
}
class Pupil extends Student {
double hcScore;
Pupil(String n, char s, int num, double hcs) {
super(n, s, num); //同上
hcScore = hcs;
}
void show() {
System.out.println("nameis" + name + ",sexis" + sex + ",numberis"
+ number + ",Scoreis" + hcScore);
}
}