刚遇到这么一个有关父类与子类构造函数调用的问题,原代码如下:
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");
}
考察的知识点有:
- 写一个类,如果没有写构造函数,那么这类默认会有一个无参的构造函数。如果写构造函数了,那么就不会有默认的无参构造函数,以自己写的构造函数为准。
- 子类在写构造函数的时候,第一行必须用super 关键字调用父类的任一构造函数。
- 用super调用父类的构造函数时,如果调用的是父类无参构造函数,则super()可以不用写,如果是有参构造函数,则必须显示调用。否则就是会报错。
本文首发于:Java父子类构造函数之间的约束-向东的笔记本
《Java父子类构造函数之间的约束》留言数:0