繁体   English   中英

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

[英]Error - The constructor Level2Class(double) is undefined

我的代码-

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中创建必要的构造函数,它将成功。 但是,我想知道原因。

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

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

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

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

Level2Class具有唯一的默认构造函数,该构造函数将由编译器实现。 Level2Class没有构造函数,该构造函数将double作为参数。

Level2Class l2c = new Level2Class(10.0D);

这将尝试找出Level2Class类中的双重构造函数,该构造函数不可用,因为构造函数未继承。

在Level2Class类中使用双参数创建构造函数

public class Level2Class extends Level1Class
{
   Level2Class (double val)
   {
     // body of the constructor
   }
} 

Java中的构造函数不是多态的,当您调用new Level2Class(10.0D)程序时找不到Level2Class(double) ,会看到Level2Class()在这种情况下为默认构造函数Level2Class()

只是在编译代码后说:

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

因此,您必须声明构造函数Level2Class(double) { super(double) }才能正常工作

在Java中,无论何时扩展类,都将仅继承public和protected方法,而不继承构造函数。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM