class A {
A(int x) { System.out.println("constructor A"); } }
class B extends A {
B() { System.out.println(" constructor B"); } }
public class C {
public static void main(String args[]) { B b = new B(); } }
它说A类的构造函数不适用于给定的类型。
答案 0 :(得分:10)
您必须在构造函数A(int x)
中显式调用构造函数B()
。即,你必须写
class B extends A {
B() {
super(<<< insert some int here>>>);
System.out.println(" constructor B");
}
}
如果你没有添加这样的超级调用,那么java将为你插入super();
,它会尝试调用A()
。由于没有构造函数A()
,您会收到错误,指出您的构造函数不能应用于参数类型。
答案 1 :(得分:1)
如果你写一个parameterized的,那么在类中有一个默认的构造函数总是很好的。
class A {
A(){System.out.println("Default A");}
A(int x) { System.out.println("constructor A"); } }
class B extends A {
B() { System.out.println(" constructor B"); } }
public class C {
public static void main(String args[]) { B b = new B(); } }
答案 2 :(得分:0)
如果我们没有为类A指定构造函数,那么没有args的默认构造函数将与该类关联,如果为类A指定一个/多个构造函数,则必须使用其中一个每次你想从这个类创建一个对象。当一个类B扩展一个类A时,如果你没有指定一个构造函数,那么构造函数必须通过super()
调用父类(A)的一个构造函数。到A然后它实现上被称为B的构造函数,如果你明确定义了A的构造函数,那么当你创建B的构造函数时你必须调用它:
B() { super(0)/*this call should be if the first line, you have to pass your default args if the constructor have args*/;
System.out.println(" constructor B");
}
答案 3 :(得分:0)
您看到的是constructor chaining
,read
摘录。
If a constructor does not explicitly invoke a superclass constructor, the Java compiler
automatically inserts a call to the no-argument constructor of the superclass. If the super
class does not have a no-argument constructor, you will get a compile-time error. Object
does have such a constructor, so if Object is the only superclass, there is no problem.