0

スーパークラスのパラメーター化されたコンストラクターを呼び出していますが、デフォルトのコンストラクターがないなどのコンパイル時エラーもスローしています。なぜですか? プログラムに従って、デフォルトのコンストラクターをまったく呼び出していないためです。

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"); 
    } 
}
4

2 に答える 2

2

特に指定しない限り、基本クラスのコンストラクターはスーパークラスを呼び出そうとするため、スーパークラスのデフォルトコンストラクターを定義する必要があります。この場合、スーパークラスにはパラメーターなしのコンストラクターがないため、コンパイルエラーが発生します。

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("some string")

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

class Sub extends Sup 
{ 
    public Sub() 
    { 
        super("some string");

        System.out.println("sub class"); 
    } 

    public static void main(String arg[]) 
    {  
        Sup s2=new Sup("pavan"); 
    } 
}
于 2012-12-30T15:24:46.590 に答える
1

Sub() コンストラクターは、指定しなかった Sup クラスでデフォルト コンストラクターを呼び出しています (明示的に super() を呼び出さない場合、またはコンストラクターの最初の行で同じクラスの別のコンストラクターを呼び出さない場合は暗黙的に行われます)。Sub() コンストラクターに Sup(String s) への呼び出しを追加するか、Sup クラスにデフォルトのパラメーターなしのコンストラクターを追加する必要があります。

于 2012-12-30T15:25:31.600 に答える