class Num
{
Num(double x)
{
System.out.println( x ) ;
}
}
class Number extends Num
{
public static void main(String[] args)
{
Num num = new Num(2) ;
}
}
在上面的程序中,出现了错误。请帮我解决。
class Num
{
Num(double x)
{
System.out.println( x ) ;
}
}
class Number extends Num
{
public static void main(String[] args)
{
Num num = new Num(2) ;
}
}
当您定义自己的构造函数时,编译器不会为您提供无参构造函数。当您定义一个没有构造函数的类时,编译器会为您插入一个调用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) ;
}
}
你的构造函数是为类double
定义的,但你使用整数参数调用了Num。整数不会自动转换为双精度浮点数,并且你没有默认构造函数,因此会出现编译错误。
正如Asalynd正确地回答了这个问题。 您的构造函数是为double类定义的,但您使用整数参数调用Num。整数不会自动提升为双精度浮点数,并且您没有默认构造函数,因此会出现编译错误。在传递参数之前,您必须进行类型转换。