Java 基本・派生クラス間の変数オーバーライド

基本クラスとその派生クラスに同じ名前の変数がある場合は、
どのようにして使い分ければ良いでしょうか?

例えば、基本クラスにint型のdata変数があったとします。
そして、その派生クラスにも、int型のdata変数があったとします。

こういう場合、基本クラスのdataが、
派生クラスのdataによって上書きされ、
見えなくなりますこれをオーバーライドと言います。

しかし、オーバーライドされた
基本クラスの変数にアクセスする事も可能です。

オーバーライド実装例

/********** 基本クラス **********/
class kihon {
      public int data;

}

/********** 派生クラス **********/
class hasei extends kihon {
      public int data;

      public void func() {
            data = 10;            // 派生クラスのdataにアクセス
            this.data = 10;       // 派生クラスのdataにアクセス
            super.data = 10;      // 基本クラスのdataにアクセス
            ((kihon)this).data = 10;      // 基本クラスのdataにアクセス
      }

}

public class Cmain {

      public static void main(String[] args) {
            hasei b = new hasei();
            b.func();
      }
}

このプログラムには、
基本クラスとその派生クラスにdata変数があります。

オーバーライドされているため、
派生クラスからは、通常、派生クラスで再定義した
dataにしかアクセスできません。

しかし、superと言う記述を使うと
基本クラスのdataにアクセスできるようになります。

また、キャストを使う事によってもアクセスできるようになっています。

thisによる派生クラスの参照を
基本クラスの参照にキャストする事によって実現しています。

もし、基本クラスのdataがprivate指定だった場合は、
その派生クラスからはアクセスできないので、
変数のオーバーライドにはなりません。

タイトルとURLをコピーしました