错误 - 构造函数Level2Class(double)未定义

时间:2012-12-14 08:57:31

标签: java

我的代码 -

public abstract class Level1Class
{
  protected double num = 0.0D;  
  protected Level1Class(){}
  protected Level1Class(double num){this.num = num;}
  protected abstract methods A, B, C...etc //pseudocode !

}

public class Level2Class extends Level1Class
{
  //NO CONSTRUCTORS HERE
  //BUT, only implementation of methods A,B, C
} 

public class Tester
{
  Level2Class l2c = new Level2Class(10.0D); //This causes the compiler error ! 
}

有人能告诉我为什么会收到此错误。我知道如果我在Level2Class中创建必要的构造函数,它将会发生。但是,我想知道原因。

5 个答案:

答案 0 :(得分:5)

您描述的行为的主要原因是Java构造函数不是继承的。创建课程时,您有两种选择:

  1. 根本不指定任何构造函数(如示例所示)。在这种情况下,编译器将自动添加默认构造函数(没有参数)。

  2. 创建特定构造函数(带参数或不带参数)。在这种情况下,只有您定义的构造函数将存在于类中,编译器不会添加默认构造函数。

  3. 在您的示例中,您没有在类Level2Class中定义任何构造函数,因此编译器添加了没有参数的默认构造函数。编译类中不存在参数double的构造函数,因此您的错误构造函数未定义

答案 1 :(得分:3)

Level2Class只有一个默认的构造函数,可以由编译器实现。 Level2Class没有构造函数,它将double作为参数。

Level2Class l2c = new Level2Class(10.0D);

这将试图找出Level2Class类中的双构造函数,因为构造函数不是继承的,所以它不可用。

答案 2 :(得分:2)

在Level2Class类

中创建一个带有double参数的构造函数
public class Level2Class extends Level1Class
{
   Level2Class (double val)
   {
     // body of the constructor
   }
} 

答案 3 :(得分:1)

java中的构造函数不是多态的,当你调用new Level2Class(10.0D)程序找不到Level2Class(double)它看到Level2Class()这是本例中的默认构造函数。

简单地说在编译代码之后会像:

Level2Class {
  Level2Class() { super(); }
}

所以你必须声明构造函数Level2Class(double) { super(double) }才能使其正常工作

答案 4 :(得分:1)

在Java中,每当扩展一个类时,只继承public和protected方法,而不是构造函数。

相关问题