开发者社区> 问答> 正文

java 子类的构造器提示报错

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个参数的构造函数,但是现在为什么会报错呢

展开
收起
蛮大人123 2016-03-10 14:30:56 2155 0
1 条回答
写回答
取消 提交回答
  • 我说我不帅他们就打我,还说我虚伪

    某个类如果没有构造函数,编译器会自动给添加一个无参构造函数;如果已经有了构造函数,就不会自动添加。
    子类的构造函数必须调用父类的构造函数。如果没有显式地调用父类的构造函数,虚拟机就会自动地去调父类的无参构造函数。这种情况下,如果父类没有无参构造函数,编译器就会报错。
    你的Student第二个构造函数会去调父类Person的无参构造函数,然而父类只有一个带参数的构造 ,所以报错了。

    2019-07-17 18:57:38
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
Spring Cloud Alibaba - 重新定义 Java Cloud-Native 立即下载
The Reactive Cloud Native Arch 立即下载
JAVA开发手册1.5.0 立即下载