スポンサードリンク
HOME > Java > 基本・派生クラス間の変数オーバーライド

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

基本クラスとその派生クラスに同じ名前の変数がある場合は、

どのようにして使い分ければ良いでしょうか?

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

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

こういう場合、基本クラスのdataが、派生クラスのdataによって上書きされ、

見えなくなります。これをオーバーライドと言います。

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

オーバーライド実装例

ファイル名:Cmain.java

/********** 基本クラス **********/
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による派生クラスの参照を基本クラスの参照にキャストする事によって

実現しています。


もし、基本クラスのdataprivate指定だった場合は、

その派生クラスからはアクセスできないので、変数のオーバーライドにはなりません。



スポンサードリンク







HOME

言語解説編
プログラミング用語・知識

C言語

C++言語

Java

C#

Visual Basic.NET

アプリケーション編
C言語による
コンソールプログラミング




Copyright (C) プログラミングランド All Rights Reserved