Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/372.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 默认和参数化构造函数_Java - Fatal编程技术网

Java 默认和参数化构造函数

Java 默认和参数化构造函数,java,Java,我正在调用超类的参数化构造函数,然后它也抛出编译时错误,比如没有默认构造函数为什么?因为根据程序,我根本不调用默认构造函数 class Sup { public Sup(String s) { System.out.println("super"); } } class Sub extends Sup { public Sub() { System.out.println("sub class");

我正在调用超类的参数化构造函数,然后它也抛出编译时错误,比如没有默认构造函数为什么?因为根据程序,我根本不调用默认构造函数

class Sup
{
    public Sup(String s)
    { 
        System.out.println("super"); 
    } 
} 

class Sub extends Sup 
{ 
    public Sub() 
    { 
        System.out.println("sub class"); 
    } 

    public static void main(String arg[]) 
    {  
        Sup s2=new Sup("pavan"); 
    } 
}

您需要定义超级类的默认构造函数,因为除非另外指定,否则基类构造函数将尝试调用超级类,在您的情况下,超级类没有无参数构造函数,因此您将得到编译错误

class Sup
{
    public Sup(){}

    public Sup(String s)
    { 
        System.out.println("super"); 
    } 
} 

class Sub extends Sup 
{ 
    public Sub() 
    { 
        System.out.println("sub class"); 
    } 

    public static void main(String arg[]) 
    {  
        Sup s2=new Sup("pavan"); 
    } 
}
或者使用
super()
对超级类构造函数进行显式调用,对于参数化构造函数
super(“某些字符串”)


您需要定义超级类的默认构造函数,因为除非另外指定,否则基类构造函数将尝试调用超级类,在您的情况下,超级类没有无参数构造函数,因此您将得到编译错误

class Sup
{
    public Sup(){}

    public Sup(String s)
    { 
        System.out.println("super"); 
    } 
} 

class Sub extends Sup 
{ 
    public Sub() 
    { 
        System.out.println("sub class"); 
    } 

    public static void main(String arg[]) 
    {  
        Sup s2=new Sup("pavan"); 
    } 
}
或者使用
super()
对超级类构造函数进行显式调用,对于参数化构造函数
super(“某些字符串”)


您的Sub()构造函数正在Sup类中调用您未提供的默认构造函数(如果您未显式调用super()或在构造函数的第一行调用同一类中的另一个构造函数,则默认构造函数是隐式完成的)。你应该在Sub()构造函数中添加对Sup(字符串s)的调用,或者在你的Sup类中添加默认的无参数构造函数。

你的Sub()构造函数正在调用默认构造函数(如果你没有显式调用super(),或者在构造函数的第一行调用同一类中的另一个构造函数,则隐式调用默认构造函数)在您未提供的辅助类中。您应该在Sub()构造函数中添加对Sup(String s)的调用,或者在Sup类中添加默认的无参数构造函数。

我以为
b
c
之前的东西,但它看起来确实很像
Java
!我以为
b
c
之前的东西,但它看起来确实很像
Java
!不能重写构造函数。构造函数不是继承的,所以不能重写。你是对的,我的意思是重写,但是没有意义,所以你删除了它。你不能重写构造函数。构造函数不是继承的,所以不能被重写。你是对的,我的意思是重写,但是没有意义,所以你已经删除了它