你犯了两种错误:
1,构造函数没有返回值,你却给它加了返回值
改正方法:去掉Fu和Zi前面的viod
2,你定义的Fu(String name,int age){}这个构造方法把JVM默认的无参构造方法Fu(){ }给覆盖掉了
JVM默认子类的构造方法在调用父类的无参构造方法,由于父类无参构造被覆盖造成错误,这个个问题解决方法有两个:
<1>改父类,把父类的无参构造明确写出来,这样就不会被覆盖掉了;如下:
class Fu {
String name;
int age;
Fu() {
}
public Fu(String name, int age) {
this.name = name;
this.age = age;
System.out.println("aaaa");
}
}
<2>改子类,在子类中明确写出调用父类的带参数的构造方法,如下:
class Zi extends Fu {
public Zi(String name, int age) {
super(name,age);
System.out.println("bbbb");
}
}
第二种方法明显比第一种要好的多,完整的代码如下:
public class ExtendsDemo2 {
public static void main(String[] args) {
// Zi z = new Zi();
Zi z1 = new Zi("zhangsan", 23);
}
}
class Fu {
String name;
int age;
Fu() {
}
public Fu(String name, int age) {
this.name = name;
this.age = age;
System.out.println("aaaa");
}
}
class Zi extends Fu {
public Zi(String name, int age) {
super(name,age);
System.out.println("bbbb");
}
} |