class A{
A(String s){
System.out.println("New A" + s);
}
public static void main(String[] args){
}
}
class B{
B(String s){
System.out.println("New B" + s);
}
public static void main(String[] args){
}
}
class C extends A{
C(String s){
System.out.println("New C" + s);
}
public static void main(String[] args){
}
}
第28行错误," C(字符串s){"
我正在按照一步一步的方式练习课程。非常困惑。非常感谢您帮助解决这个愚蠢的问题。
答案 0 :(得分:3)
这是因为C扩展A.为了正确扩展,您还需要为A调用构造函数.A的唯一构造函数是A(String s)
。以下应该有效:
C(String s){
super(s); // calls new A(s)
System.out.println("New B" + s);
}
基本上,当你在子类中创建一个构造函数(在本例中是C)时,它需要调用一个超类构造函数来设置对象的一部分"这对应于A(缺乏更好的术语)。如果不对超类构造函数进行显式调用,它将自动调用super()
而不使用任何参数 - 仅当存在构造函数A()
时,它才会工作。 1
1 这很复杂,因为如果你不在超类中构建一个构造函数,它实际上会有一个隐式构造函数,其内容如下: public A() {}
,意思是它不需要任何参数,也没有特别的作用。
答案 1 :(得分:0)
您可以在A和A类中添加默认构造函数。 C喜欢
public class A{
public A(){}
public A(String s){
System.out.println("New A" + s);
}
public static void main(String[] args){
}
}
class C extends A{
public C(){}
public C(String s){
System.out.println("New C" + s);
}
public static void main(String[] args){
}
}