详细报错信息:
A.java:33: 错误: 无法将类 Student中的构造器 Student应用到给定类型;
public student1(String name,int age,int money){
需要: String,int 找到: 没有参数
原因: 实际参数列表和形式参数列表长度不同
直接上代码:
//继承练习
//父类
class Student{
private String name; //名字
private int age; //年龄
//构造方法
//有参构造
public Student(String name,int age){
this.name=name;
this.age=age;
}
//getter
public String getName(){
return this.name;
}
public int getAge(){
return this.age;
}
//setter
public void setName(String name){
this.name=name;
}
public void setAge(int age){
this.age=age;
}
}
//子类1
class student1 extends Student{
private int money;
//有参构造
public student1(String name,int age,int money){
this.setName(name);
super.setAge(age);
this.money=money;
}
//setter
public void setMoney(int money){
this.money=money;
}
//getter
public int money(){
return this.money;
}
public void show(){
System.out.println("姓名:"+super.getName()+" 年龄:"+this.getAge()+" 金钱:"+this.money);
}
}
//测试类
class A{
public static void main(String[]args){
student1 s=new student1("lg",20,20000);
s.show();
}
}
结果:
A.java:33: 错误: 无法将类 Student中的构造器 Student应用到给定类型;
public student1(String name,int age,int money){
^
需要: String,int
找到: 没有参数
原因: 实际参数列表和形式参数列表长度不同
1 个错误
报错原因 :
子类初始化的时候,如果不指定调用父类的某个构造,则需要调用父类的无参构造。你父类的构造是有参构造。会把默认的无参构造覆盖掉。所以编译会报错。
解决办法:
方法1:
在父类加一个无参构造
方法2:
子类中用super显式指定调用哪个父类构造