2016-10-15 18 views
0

私はaccessFlag静的整数を持つ抽象クラスUserを持っています。そして、私はこのクラスを異なるaccessFlagで継承する複数のクラスを持っています。学生、管理者、先生。これらのクラスはすべてaccessFlagを含む必要がありますが、私は管理者の静的なaccessFlag = 2のようなクラスに設定したいと思います。静的継承された静的変数のオーバーライド

管理者を作成してaccessFlagを表示するときのコードは、現在2つではなく0を表示しています。私は管理者でgetterとsetterを作成できたと仮定して、適切な値を取得しますaccessFlagのユーザーゲッターとセッターから継承したすべてのクラスでコードが重複しています。

abstract public class User 
    { 
     static int accessFlag; 

     public int AccessFlag 
     { 
      get 
      { 
       return accessFlag; 
      } 

      set 
      { 
       accessFlag = value; 
      } 
     } 
    } 
    public class Administrator: User 
     { 
      static int accessFlag = 2; 
     } 
+2

静的メンバーは継承されません。だからあなたはまたそれらを無効にすることはできません。 – poke

+0

私はあなたがここで静的を望まないと確信しています。あなたは代わりにインターフェイスを考えましたか? – Eris

+0

@静的フィールドでない場合はどうしたらいいですか?私はまだ エリスまあインタフェースは唯一の方法は、私はよく分からないことができ、ユーザのクラスを継承するすべてのクラスでオーバーライドゲッターとセッターを記述する必要があります場合は最高のアイデアのthats – Higeath

答えて

0

言語の対応方法はありません。プロパティのゲッターとセッターをオーバーライドするのが最良です。ところで、私はセッターがここで意味をなさないとは思わない。

これを使わないで達成するための唯一の選択肢は反射です。ゲッターでオブジェクトのGetType()を呼び出して、そのクラスのメンバaccessFlagを求めます。しかし、それはかなり遅くて醜いでしょう。

関連する問題