1

Javaの基底クラスからクラスのフィールドにアクセスしたい。ドットネットでできます。例を参照してください。

public class a{

// here I want to read the value of name or f1 or f2 or every other field values from derived classes
}
public class b extends a{
  public string name;
}
public class c extends a{
  public string f1;
  public string f2;
}

どうやってするの?

4

3 に答える 3

3

サブクラスに明示的に名前を付けないと、クラスが所有していないフィールドを読み取ることはできません。したがって、これは次のように実行できます。

((c)this).f1;

ただし、これを行うと、コードの悪臭がします。具体化された抽象化aを、特定の実装/拡張の 1 つに結び付けています。設計を再考する必要があります。

コード規約に関する重要な注意事項

Java では、キャメルケースを使用してクラスに名前を付け、小文字を使用してパッケージに名前を付ける必要があります。そうしないと、かなり悪い名前解決の異常が発生する可能性があります。言うまでもなく、Java ユーザーはコードを読むのに完全に迷子になります。

于 2013-10-02T12:32:24.570 に答える
0

この場合にすべきことは、クラス b と c が実装しなければならないクラス a に抽象メソッドを定義することです。次に、これらのメソッドを a から呼び出して、b と c によって設定された値を取得できます。

public abstract class a{

// here I want to read the value of name or f1 or f2 or every other field values from derived classes
    abstract String getName();
    abstract String getF1();
    abstract String getF2();
}

public class b extends a{
  private String name;

  @Override
  public String getName() { return name; } 

  @Override
  public String getF1() { return null; }

  @Override
  public String getF2() { return null; }
}

public class c extends a{
  public String f1;
  public String f2;


  @Override
  public String getName() { return null; } 

  @Override
  public String getF1() { return f1; }

  @Override
  public String getF2() { return f2; }
}
于 2013-10-02T12:39:36.117 に答える