Java父子类构造函数之间的约束

向东       2024/11/24       技术       共655字       106

刚遇到这么一个有关父类与子类构造函数调用的问题,原代码如下:

class Base{
    public Base(String s){
        System.out.print("B");
    }
}

public class Main extends Base {
    public Main (String s) {
        System.out.print("D");
    }
    public static void main(String[] args){
        new Main("C");   
    }
}

如果去运行这个代码的话,会得到下面的错误提示:

Main.java:9: error: constructor Base in class Base cannot be applied to given types;
    public Main (String s) {
                           ^
  required: String
  found:    no arguments
  reason: actual and formal argument lists differ in length
1 error

解决办法就是:

public Main (String s) {
        super("s")
        System.out.print("D");
    }

考察的知识点有:

  1. 写一个类,如果没有写构造函数,那么这类默认会有一个无参的构造函数。如果写构造函数了,那么就不会有默认的无参构造函数,以自己写的构造函数为准。
  2. 子类在写构造函数的时候,第一行必须用super 关键字调用父类的任一构造函数。
  3. 用super调用父类的构造函数时,如果调用的是父类无参构造函数,则super()可以不用写,如果是有参构造函数,则必须显示调用。否则就是会报错。

除非注明,向东的笔记本文章均为原创,本文地址 https://www.mengxiangdong.com/jishu/186.html,转载请以链接形式注明出处。

作者: 简介:

《Java父子类构造函数之间的约束》留言数:0

发表留言