Java 隐式超类构造函数MyNumber()未定义。必须调用另一个构造函数
我在下面的代码中得到了标题中提到的错误。请告诉我为什么会出现这个错误,尽管我没有在任何地方从超类调用默认构造函数MyNumber(),以及如何修复它Java 隐式超类构造函数MyNumber()未定义。必须调用另一个构造函数,java,Java,我在下面的代码中得到了标题中提到的错误。请告诉我为什么会出现这个错误,尽管我没有在任何地方从超类调用默认构造函数MyNumber(),以及如何修复它 package referencereturntype; 公共类MyNumber{ 字符串数 public MyNumber(String str){ num=str; } public static void main (String [] args){ MyNumber my_num= new MyNumber("+2");
package referencereturntype;
公共类MyNumber{
字符串数
public MyNumber(String str){
num=str;
}
public static void main (String [] args){
MyNumber my_num= new MyNumber("+2");
System.out.println("Success! The object of the class itself is successfully returned from retOb(). The object now contains the string : " + retOb(my_num).num);
}
public static SubMyNumber retOb(MyNumber my_num){
SubMyNumber sub_my_num= new SubMyNumber("-50");
sub_my_num.nums=my_num.num;
return sub_my_num;
}
}
公共类SubMyNumber扩展了MyNumber{
字符串nums
public SubMyNumber( String strs){
nums=strs;
}
}
提前感谢。因为没有默认构造函数,所以必须显式调用它
public class SubMyNumber extends MyNumber {
String nums;
public SubMyNumber( String strs){
super(null); // Or the value you want to superClass
this.nums=strs;
}
因为没有默认构造函数,所以必须显式调用它
public class SubMyNumber extends MyNumber {
String nums;
public SubMyNumber( String strs){
super(null); // Or the value you want to superClass
this.nums=strs;
}
因为没有默认构造函数,所以必须显式调用它
public class SubMyNumber extends MyNumber {
String nums;
public SubMyNumber( String strs){
super(null); // Or the value you want to superClass
this.nums=strs;
}
因为没有默认构造函数,所以必须显式调用它
public class SubMyNumber extends MyNumber {
String nums;
public SubMyNumber( String strs){
super(null); // Or the value you want to superClass
this.nums=strs;
}
实例化派生类时,必须从基类调用构造函数。
如果不这样做,Java将隐式调用默认构造函数
如果没有默认构造函数,则会出现该错误。在实例化派生类时,必须从基类调用构造函数。
如果不这样做,Java将隐式调用默认构造函数
如果没有默认构造函数,则会出现该错误。在实例化派生类时,必须从基类调用构造函数。
如果不这样做,Java将隐式调用默认构造函数
如果没有默认构造函数,则会出现该错误。在实例化派生类时,必须从基类调用构造函数。
如果不这样做,Java将隐式调用默认构造函数
如果没有默认构造函数,则会出现该错误。当超类没有默认的空构造函数时,则必须从子类的构造函数显式调用
super
。当超类没有默认的空构造函数时,然后必须从子类的构造函数显式调用super
。当超类没有默认的空构造函数时,必须从子类的构造函数显式调用super
。当超类没有默认的空构造函数时,然后必须从子类的构造函数显式调用super
。从
如果构造函数体不是以显式构造函数调用开始,并且所声明的构造函数不是原始类对象的一部分,则构造函数体隐式以超类构造函数调用开始
由于超类中没有args构造函数,因此必须从中显式调用带有字符串
参数的构造函数
如果构造函数体不是以显式构造函数调用开始,并且所声明的构造函数不是原始类对象的一部分,则构造函数体隐式以超类构造函数调用开始
由于超类中没有args构造函数,因此必须从中显式调用带有字符串
参数的构造函数
如果构造函数体不是以显式构造函数调用开始,并且所声明的构造函数不是原始类对象的一部分,则构造函数体隐式以超类构造函数调用开始
由于超类中没有args构造函数,因此必须从中显式调用带有字符串
参数的构造函数
如果构造函数体不是以显式构造函数调用开始,并且所声明的构造函数不是原始类对象的一部分,则构造函数体隐式以超类构造函数调用开始
由于超类中没有args构造函数,因此必须显式调用带有
字符串参数的构造函数问题是,如果类中没有定义构造函数,java在内部提供了一个默认构造函数,该构造函数可进一步用于创建对象。如果您提供自己的构造函数(可以是默认的或参数化的),Java提供的隐藏构造函数将丢失。
在您的例子中,您已经在“MyNumber”中提供了一个参数化构造函数。因此,隐藏的默认构造函数不再可从子类的构造函数(super())调用
在这段代码中,您需要做的唯一更改是
1.除了已经存在的参数化构造函数之外,还提供您自己的默认构造函数。现在,当类“MyNumber”的默认构造函数应从“SubMyNumber”参数化构造函数中的第一个LOC内部调用时,不会出现任何错误
或者您可以像这样更改subn类的参数化构造函数
公共子MyNumber(字符串strs){
超级(strs);
nums=strs;
}
通过这种方式,您应该显式地设置要调用的MyNumber的参数化构造函数,该构造函数已经定义。问题是,如果您的类中没有定义构造函数,java在内部提供了一个默认构造函数,该构造函数进一步用于创建对象。如果您提供自己的构造函数(可以是默认的或参数化的),Java提供的隐藏构造函数将丢失。
在您的例子中,您已经在“MyNumber”中提供了一个参数化构造函数。因此,隐藏的默认构造函数不再可从子类的构造函数(super())调用
在这段代码中,您需要做的唯一更改是
1.除了已经存在的参数化构造函数之外,还提供您自己的默认构造函数。现在,当类“MyNumber”的默认构造函数应从“SubMyNumber”参数化构造函数中的第一个LOC内部调用时,不会出现任何错误
或者您可以更改参数化