基本クラスとその派生クラスに同じ名前の変数がある場合は、
どのようにして使い分ければ良いでしょうか?
例えば、基本クラスに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指定だった場合は、
その派生クラスからはアクセスできないので、
変数のオーバーライドにはなりません。