package test;class Person { public String name; public int age; public Person(String name) { this.name = name; // this.age = age; System.out.println("Person constructor is called"); }}public class Student extends Person { public int grade; public Student(String name,int age,int grade) { super(name); } public Student(String name,int age) { } public static void main(String[] args) { Student studnet = new Student("jiajiama",20,3); }}会提示如下的报错:Student.java:18: 错误: 无法将类 Person中的构造器 Person应用到给定类型;public Student(String name,int age) { ^需要: String找到: 没有参数原因: 实际参数列表和形式参数列表长度不同1 个错误我的理解是:应该调用student 的三个参数的构造函数,然后调用super调用父类中只有1个参数的构造函数,但是现在为什么会报错呢
2 回答
江户川乱折腾
TA贡献1851条经验 获得超5个赞
所有的构造方法都需要调用父类的构造方法,你可以通过 this 衔接到类本身的其他构造方法,但是最终必须得存在父类的构造方法(如果父类构造方法无参数,可以省略)。你这个 Student(String name,int age) 构造方法既没有调用父类的构造方法,也没有衔接到其他的构造方法里,当然有错拉。
慕慕森
TA贡献1856条经验 获得超17个赞
某个类如果没有构造函数,编译器会自动给添加一个无参构造函数;如果已经有了构造函数,就不会自动添加。
子类的构造函数必须调用父类的构造函数。如果没有显式地调用父类的构造函数,虚拟机就会自动地去调父类的无参构造函数。这种情况下,如果父类没有无参构造函数,编译器就会报错。
你的Student第二个构造函数会去调父类Person的无参构造函数,然而父类只有一个带参数的构造 ,所以报错了。
添加回答
举报
0/150
提交
取消