Java写继承子类的时候报错There is no default constructor available in ‘子类名‘

Java写继承子类的时候报错There is no default constructor available in ‘子类名’

最近因为工作需要,不得不开始学习Java,跟着教程学习过程中也遇到了不少的问题,在这里总结记录一下。
我写了一个父类,在写继承子类的时候出现的报错,父类代码如下:

public class Person {
    private String name;
    private int age;
    /*
    public void setName(String name){
        this.name = name;
    }
    public void setAge(int age){
        this.age=age;
    }
    */
    public Person(String name, int age){
        this.name = name;
        this.age = age;
    }
    public String getName(){
        return this.name;
    }

    public int getAge(){
        return this.age;
    }
}

在写继承的子类的时候(如下),就报了标题的错误

class Student extends Person{
    private double scroe;
    public double getScore(){
        return this.scroe;
    }
    public void setScore(double score){
        this.scroe=score;
    }

}

Google了一番发现原来是父类当中构造方法存在参数,而在子类当中,默认的构造方法是没有参数的。可能许多人猛地一看,这有什么问题吗?首先需要了解以下知识

  • 当写一个类的时候如果不写一个构造方法,那么编译器就会默认创建一个无参数的构造方法
  • 当你写了一个有参数的构造方法时,默认创建的那个构造方法就会被废弃,如果仍想要使用,需要显示的写出来才行
  • 在通过new实例化子类的时候,在子类的构造方法中会先调用父类的构造方法,如果子类没写,那么就会默认用super()自动调用父类的构造方法;而如果像现在这样,父类的构造方法有参数,而子类默认调用的父类无参数的构造方法,而无参数的构造方法因为没有显示表达,被废弃。那么在初始化的时候父类的构造方法就初始化不成功。

所以在子类中,至少有一个和父类中一致的构造方法,才能够正常的初始化。像下边这样,在子类的构造方法中显示的调用父类的构造方法即可解决这个问题。

 public Student(String name, int age){
        super(name, age);
    }

  • 6
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值