ちくやらアーカイブ

このブログは気分よって構成されています。 BGMも気分で流してます。 あなたの忍耐に感謝します。

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
  1. --/--/--(--) --:--:--|
  2. スポンサー広告|
  3. トラックバック(-)|
  4. コメント(-)

オーバーライドとオーバーロード

よくでる問題だけど、慣れると簡単で点数稼ぎになる。


● オーバーライド

最初、名前が混乱するかもしれないが(笑)
オーバーライドとは「上書き」。
サブクラスを作った時にスーパークラスにあるメソッドを
「上書きする」ということである。
私はこんなイメージで覚えました。


で、「上書き」なのでちゃんと規則があり
これを覚える必要があり。


・同じ引数(シグネチャ)であること。
・同じ戻り値であること。
・throwsをつけていた場合、新しい例外や範囲の広がる例外はつけれない。
 ただし、より狭い例外やチェック無しの例外は投げることができる。
・アクセス修飾子については、より厳しいものにはできず、緩いものにはできる。
 例えば、オーバーライド元のメソッドのアクセス修飾子が
 protected → publicは可能だが、逆は×
 修飾子無し → privateも×だが、逆は可。


オーバーライドについて修飾子のレベルと例外のレベルは
↓のような図を書いてイメージで覚えてました。
なんていうか、左は↑が○で右は↓が×みたいな……(汗)


 ○     ×
広がる  広がる
 ↑     ↑
「元の修飾子」メソッド名(シグネチャ)「元の例外」
 ↓     ↓
狭まる  狭まる
 ×     ↓
何もなしとRuntimeException
      ↓
  ○


※RuntimeExceptionは
 Exceptionのサブクラスなので「狭い」になる。

※アクセス修飾子については
 ここを参照





・finalメソッドはオーバーライドできない。
・staticメソッドをオーバーライドする時は、やはりstaticを必ずつける。


Sunのサイトにあった問題。


下記の内、オーバーライドの関係になるものを2つ選択して下さい。
1.native void methoda();
2.final void methoda() {}
3.void final methoda() {}
4.synchronized void methoda() {}
5.synchronized final void methoda() {}

1と4

どのオーバーライドメソッドを使うかは実行時のオブジェクト型で決まる





●オーバーロード


よくでる問題なのが、オーバーロードのメソッドを探せとか
オーバーライドになるメソッドを探せみたいなやつ・


・シグネチャの並び順が変わったら、それだけでオーバーロード対象。
 まずこれだけで見破れる。

・引数の並びが同じだけど戻り値が違う奴とかはオーバーロードではなく
 オーバーライドなんだけどエラーのものである。
 「オーバーライドだったらエラーになる」奴が含まれていることもあるので注意。

・オーバーロードの戻り値は自由に変えることができる。
 オーバーライドの戻り値は変えることができない。


・どのオーバーロードメソッドを使うかはコンパイル時の参照型で決まる
スポンサーサイト
  1. 2005/04/17(日) 16:18:39|
  2. 資格:SJC-P|
  3. トラックバック:0|
  4. コメント:0
<<日曜日-a.m.00:00/太陽圏 | ホーム | クラスの宣言>>

コメント

コメントの投稿

管理者にだけ表示を許可する

トラックバック

トラックバックURLはこちら
http://runark.blog6.fc2.com/tb.php/29-df60db24

ルナーク

Category

Recent Comments

Recent Entries

Recent Trackbacks

Archives

Links

Search

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。