私はクラスを持つべきだと思うか動作していませんスーパーコンストラクターごとに割り当てられている必要があります。スーパーコンストラクタは、私はそれが
ここでは、明らかに、サブクラス化コンストラクタを理解する上での前提がありました。私は何を間違えているのですか?
私はクラスを持つべきだと思うか動作していませんスーパーコンストラクターごとに割り当てられている必要があります。スーパーコンストラクタは、私はそれが
ここでは、明らかに、サブクラス化コンストラクタを理解する上での前提がありました。私は何を間違えているのですか?
この状況をfield hidingと呼びます。サブクラスフィールドoutput
は、スーパークラスの同じ名前のフィールドを「隠しています」。
あなたはスーパークラスとサブクラスの両方に
private OutputTerminal output;
を定義しています。サブクラスのoutput
への参照はそのフィールドになりますが、スーパークラスの出力を設定しています。サブクラスフィールドはnullのままです。
は修正するには:
protected
に、スーパークラスのoutput
の宣言(そのサブクラスがそれにアクセスすることができます)両方をoutput
の宣言を削除します出力変数はローカルの各クラス の2つの異なるメンバを参照します。
あなたはむしろclass ANDGate
から
private OutputTerminal output;
を削除し、単に
System.out.println(output);
を使用し、スーパークラスの
private OutputTerminal output;
protected
してください。
スーパークラスのclass変数をprotectedとして作成し、system.out.println()行に 'this'の代わりに 'super'キーワードを使用することができます。
あなたのためのコード例。すべてを固定
//superclass
class A {
protected int a;
public A(){
a=50;
}
}
//sublcass
class B extends A{
private int a;
public B(){
super();
System.out.println(super.a);
}
}
まあ。ありがとう –