ラベル Java の投稿を表示しています。 すべての投稿を表示
ラベル Java の投稿を表示しています。 すべての投稿を表示

2010年5月30日日曜日

Java 変数のクラス型で使えるメンバが決まる


 図のように、FriendクラスはMemberクラスのサブクラスです。このとき、Friend型のオブジェクトを作成してその参照をMember型の変数に代入した結果について考えます。
 Friendクラスにはageフィールドが追加されています。また、setメソッドをオーバーロードしています。このとき、Friend型のオブジェクトを作成して、その参照をスーパークラスのMember型の参照変数mに代入しています。このときmが参照できるオブジェクトの範囲はFriend型オブジェクトがMember型から継承した部分だけです。図に示すように、それ以外の部分は、変数mを使ってアクセスすることはできません。例えば、m.set("田中",21);などとするとコンパイルエラーになります。

アクセスできるメンバは変数のクラス型による
  • オブジェクトが何型であっても、どのメンバにアクセスできるかは変数のクラス型によって決定される

2010年5月27日木曜日

Java サブクラスのオーバーロード


サブクラスでのオーバーロード(多重定義)

  • サブクラスはスーパークラスのメソッドをオーバーロードできる
  • 引数の構成(型、順序、数)を変えることでオーバーロードになる
  • 引数の構成(型、順序、数)が同じなら別の意味に(オーバーライド)になる

オーバーロードすると

  • 戻り値型 を変えることができる(戻り値型だけを変更はコンパイルエラー)
  • アクセス修飾子は自由に変えることができる(アクセス修飾子だけを変更はコンパイルエラー)

2010年5月19日水曜日

Java メソッドのオーバーライド


オーバーライド(再定義)の規則

  • 引数の構成が全く同じでなければならない
  • 戻り値は同じでなければならない
ただし、参照を返す場合のみ、Java1.5からは戻り値型を本来のクラスのサブクラスに変更できる(これを共変戻り値)
  • アクセス修飾子はよりゆるいレベルにのみ変更できる(厳しいレベルには変更できない)
private→デフォルト、protected、public
デフォルト→protected、public
protected→public
  • 継承したメソッドだけをオーバーライドできる

ちなみに、オーバーライドとオーバーロードの違いを簡単に説明すると、引数構成を変え色々な機能のメソッドを追加するのがオーバーロードですが、引数の構成を変えないでメソッドの機能を変更してしまうのがオーバーライドです。