1

コンストラクターが導入された時点でオブジェクトが既に存在しているという引数を承認できるクラス定義を作成する必要があります。

これを説明する方法がわかりません。次のようなことを試しましたが、おそらく間違っています。

public class B {

  int obj;

  public B() {  

  }

    public static void main(String[] args) {

    B object = new B();
    System.out.println(object)

    }
}

最初の演習から私が書いたコードは次のとおりです。

public class Bulb {

static int a;

public Bulb(int ab) {
    a = ab;
}


public static void main(String[] args) {

    Bulb object = new Bulb(a);
    System.out.println(object);

}

そして、1 つのパラメーター コンストラクターを使用します。

4

1 に答える 1

1

私たちの長いコメント スレッドの後、あなたがしていることは継承とポリモーフィズムについて学んでいると判断したようです。指定した B クラスは Bulb から継承する必要があり、Bulb のコンストラクターが B のコンストラクターの前に最初に呼び出されることを証明する必要があります。ログ出力を使用するよりも良い方法があるかどうかはわかりません。コードには、拡張機能とロガー メッセージを除いて、必要なものがほぼすべて含まれています。次のように両方を行うことができます。

public class Bulb{
    int ab;
    public Bulb(int ab){
        this.ab = ab;
        System.out.println("Bulb constructor is invoked");
    }

    // The rest of your Bulb class
}

また、Bulb を拡張する B クラスでは、次のようになります。

public class B extends Bulb{
    public B(int ab){
        // Call the super constructor, which in this case is the Bulb constructor
        super(ab);
        System.out.println("B constructor is invoked");
    }
    // The rest of your B class
}

それは理にかなっていますか?

編集:言及するのを忘れていました:Javaでは、継承構造がある場合、コンストラクターは常に上から下に呼び出されます。つまり、階層の最上位のクラス (この場合は Bulb) が最初に呼び出され、一番下 (たとえば、B クラス) まで細流します。

于 2012-11-11T22:04:49.813 に答える