隐式超级构造函数Num()未定义为默认构造函数。必须定义一个显式构造函数,这背后的逻辑是什么

时间:2014-07-28 12:25:48

标签: java oop object constructor core

class Num 
{
    Num(double x) 
    { 
        System.out.println( x ) ; 
    }
}
class Number extends Num 
{ 
    public static void main(String[] args)
    { 
        Num num = new Num(2) ; 
    } 
} 

在上面的程序中,它显示错误。请帮帮我。

3 个答案:

答案 0 :(得分:6)

当您定义自己的构造函数时,编译器不会为您提供无参数构造函数。 当您定义一个没有构造函数的类时,编译器会为您调用一个no-arg构造函数,并调用super()。

class Example{
}

成为

class Example{

Example(){
super();   // an accessible no-arg constructor must be present for the class to compile.
}

但是,你的类并不是这样,因为Number类找不到Num类的无参数构造函数。你需要明确地为你调用一个构造函数来调用任何超级构造函数

解决方案: -

class Num 
{
    Num(double x) 
    { 
        System.out.println( x ) ; 
    }
}

class Number extends Num 
{ 


 Number(double x){
 super(x);
 }

 public static void main(String[] args)
    { 
        Num num = new Num(2) ; 
    } 
} 

答案 1 :(得分:0)

您的构造函数是为类double定义的,但您使用整数参数调用Num。整数不会自动提升为双精度数,并且您没有默认构造函数,因此会出现编译错误。

答案 2 :(得分:0)

Asalynd正确地提供了这个问题的答案。 您的构造函数是为类double定义的,但您使用整数参数调用Num。整数不会自动提升为双精度数,并且您没有默认构造函数,因此会出现编译错误。你必须在构造函数

中传递参数之前键入强制转换