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);
}
}
3 に答える
で1-arg constructor
を宣言しましたclass A
。したがって、コンパイラはデフォルトの0引数 を提供しませんconstructor
。
ここで、ではclass B1
、を定義していないconstructor
ため、コンパイラはそのクラスにデフォルトの 0引数 を追加します。これは次のようになります。constructor
public B1() {
super();
}
ご覧のとおり、コンパイラは、のsuper()
呼び出しを追加します。この場合は、です。0-arg constructor
super class
class A
さて、あなたの、には0引数class A
がないので、エラーになります。 constructor
したがって、クラスAにを追加することができ0-arg constructor
ます:-
public A() {
}
これで問題は解決します。
または、明示的にaを追加し、のへの呼び出しを追加し0-arg constructor
ます:-class B1
super()
1-arg constructor
class A
public B1() {
super(0); // Or any value
}
ただし、2番目のソリューションの問題は、のすべてのコンストラクターから、を明示的class B1
に呼び出す必要があることです。見逃すとすぐにエラーが発生します。1-arg constructor
class A
compiler
だから、私はと一緒に行くことをお勧めし1st option
ます。にを追加0-arg constructor
しclass A
ます。そして、あなたはすべて良いです。
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 のオブジェクトを作成するとエラーが表示されるため、この場合はデフォルトのコンストラクターを指定する必要があります。上記のコードは正常に動作します。
基本的に、次のように、サブクラスでコンストラクターを定義する必要があります。
class B1 extends A{
public B1(int x){
super(x);
}
...
}
また
クラス A にデフォルトのコンストラクターを追加します。