3
class A {
     A(int i){    
        System.out.println("A(int)");
     }
 }

class B1 extends A{
    public static void main(String args[]){
        A ob=new A(2);  
    }
}
4

3 に答える 3

9

で1-arg constructorを宣言しましたclass A。したがって、コンパイラはデフォルトの0引数 を提供しませんconstructor

ここで、ではclass B1、を定義していないconstructorため、コンパイラはそのクラスにデフォルトの 0引数 を追加します。これは次のようになります。constructor

public B1() {
    super();
}

ご覧のとおり、コンパイラは、のsuper()呼び出しを追加します。この場合は、です。0-arg constructorsuper classclass A

さて、あなたの、には0引数class Aがないので、エラーになります。 constructor


したがって、クラスAにを追加することができ0-arg constructorます:-

public A() {

}

これで問題は解決します。


または、明示的にaを追加し、のへの呼び出しを追加し0-arg constructorます:-class B1super()1-arg constructorclass A

public B1() {
    super(0);  // Or any value
}

ただし、2番目のソリューションの問題は、のすべてのコンストラクターから、を明示的class B1に呼び出す必要があることです。見逃すとすぐにエラーが発生します。1-arg constructorclass Acompiler

だから、私はと一緒に行くことをお勧めし1st optionます。にを追加0-arg constructorclass Aます。そして、あなたはすべて良いです。

于 2012-11-24T13:07:43.673 に答える
0
 class A {

    A(){
    }
    A(int i){    
        System.out.println("A(int)");
     }
 }

class B1 extends A{
    public static void main(String args[]){
        A ob=new A(2);  
    }
}

A(int i) はそれを隠し、クラス a のオブジェクトを作成するとエラーが表示されるため、この場合はデフォルトのコンストラクターを指定する必要があります。上記のコードは正常に動作します。

于 2012-11-24T13:36:22.080 に答える
0

基本的に、次のように、サブクラスでコンストラクターを定義する必要があります。

class B1 extends A{

    public B1(int x){
       super(x);
    }

    ...
}

また

クラス A にデフォルトのコンストラクターを追加します。

于 2012-11-24T13:09:55.193 に答える