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个参数的构造函数,但是现在为什么会报错呢
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
某个类如果没有构造函数,编译器会自动给添加一个无参构造函数;如果已经有了构造函数,就不会自动添加。
子类的构造函数必须调用父类的构造函数。如果没有显式地调用父类的构造函数,虚拟机就会自动地去调父类的无参构造函数。这种情况下,如果父类没有无参构造函数,编译器就会报错。
你的Student第二个构造函数会去调父类Person的无参构造函数,然而父类只有一个带参数的构造 ,所以报错了。