这个java代码有什么问题?

时间:2013-01-10 00:50:25

标签: java

我正在学习java。我正在阅读的这本书有一个问题,询问以下代码有什么问题?我在NetBeans中键入了代码,我可以看到错误,但为什么会出现此错误以及如何解决?

错误在代码public A(int t)上突出显示,并显示

  

B类中的构造函数B不能应用于给定类型,require int,找不到参数,原因实际和形式参数列表的长度不同。

以下是代码:

public class Test {
    public static void main(String[] args) {
       B b = new B(5);
    }
}

class A extends B {
    public A(int t)  {
        System.out.println("A's constructor is invoked");
    }
}

class B  {
    public B(int k)   {
        System.out.println("B's constructor is invoked");
    }
}

4 个答案:

答案 0 :(得分:4)

当您的super classargs constructor并且没有no-args构造函数时,您必须使用来自子类构造函数的super(args)调用显式调用它

class A extends B {
     public A(int t)  {
         super(t);
            System.out.println("A's constructor is invoked");
        }

}

答案 1 :(得分:1)

您需要将超类的构造函数作为A(int)中的第一个语句:

public A(int t)  {
   super(t);
   System.out.println("A's constructor is invoked");
}

答案 2 :(得分:1)

B类定义了构造函数,因此它没有公共隐式默认构造函数(没有参数)。如果零参数超类构造函数不可用,则所有子类构造函数必须通过super(t)显式调用超类构造函数。

答案 3 :(得分:1)

B类只有一个带有int参数的构造函数。另一方面,类A中的构造函数(隐式)尝试在A的超类(即B)中调用不带参数的构造函数。这是错误的原因。至少有两种方法可以解决问题:

  1. 在B类中创建一个无参数构造函数。

  2. 显式调用类B中的构造函数,该构造函数将int作为参数。您可以使用super关键字

  3. 执行此操作