Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/334.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 隐式超类构造函数MyNumber()未定义。必须调用另一个构造函数_Java - Fatal编程技术网

Java 隐式超类构造函数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");

我在下面的代码中得到了标题中提到的错误。请告诉我为什么会出现这个错误,尽管我没有在任何地方从超类调用默认构造函数MyNumber(),以及如何修复它

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内部调用时,不会出现任何错误

  • 或者您可以更改参数化