代码如下:
class Person
{
public String name;
public int age;
// Person() {}
Person(String name,int age) {
setPerson(name,age);
}
public void setPerson(String name,int age) {
this.name = name;
this.age = age;
}
String getname() {
return name;
}
int getage() {
return age;
}
}
class Student extends Person {
String name;
int age;
String school;
int QQ;
Student (String name, int age, String school, int QQ) {
// super(name,age);
setStudent12(name,age,school, QQ);
}
void setStudent12(String name, int age, String school, int QQ) {
this.name = name;
this.age = age;
this.school = school;
this.QQ = QQ;
}
String getschool() {
return school;
}
int getQQ() {
return QQ;
}
}
public class STUdent
{
public static void main(String[] args)
{
Student S = new Student("李华",23,"hbmy",20);
System.out.println(S.getname()+S.getage()+S.getschool()+S.getQQ());
}
}
---------- 编译 ----------
STUdent.java:32: 错误: 无法将类 Person中的构造器 Person应用到给定类型;
Student (String name, int age, String school, int QQ) {
^
需要: String,int
找到: 没有参数
原因: 实际参数列表和形式参数列表长度不同
1 个错误
Output completed (0 sec consumed) - Normal Termination
------解决方案--------------------
Student构造时一定要要执行父类的构造函数,若没有指定就默认无参构造函数,你没有写无参的构造函数,所以编译会报错。或者在Student的构造函数调用父类有参的构造函数。
------解决方案--------------------
只要有继承,就必须用一次父类的构造方法。就算父类成员变量在子类中完全被隐藏,默认还是会调用一次无参的构造。。。上面两个注释的地方启用一个就行~
我一直是这么理解的,不知道其他人怎么看
------解决方案--------------------
子类构造的时候先调用父类构造函数,没显示调用就是调用的父类无餐那个 你这两个// 自己研究下