≪Java≫ オーバーロードとオーバーライドの違い

≪Java≫ オーバーロードとオーバーライドの違い


■ オーバーロード(多重定義)


 ・引数の型・並び順・数が違う
 ・戻り値型を変えることが可能
 ・アクセス修飾子は自由に変更可

 ・引数構成を変えて、メソッド(機能)を追加する

 【継承した場合】
  ・アクセスできる(オブジェクト内の)メンバは、変数のクラス型で決まる。
   ⇒ クラスが継承で親から A → B → C とあった場合、
     オブジェクトを作成する時の変数の型がCであれば、オブジェクト内の全てのメンバが使えるが、
     オブジェクトを作成する時の変数の方がAであれば、オブジェクト内の A のメンバしか使えない。

   (例)
     Aclass a = new Cclass();
      ↑ 変数の方が A なので、B・C のメンバは使用できない。

■ オーバーライド(再定義)


 ・引数の型・並び順・数が完全に同じ
 ・戻り値が同じ
  (ただし、参照を返す場合のみ、Java1.5以降は戻り値型を本来のクラスのサブクラスに変更が可能)
  ※(引数の型・並び順・数が完全に同じで、戻り値が違うと、オーバーロードにもならず、コンパイルエラーになる)
 ・アクセス修飾子は制限のゆるいレベルにのみ変更可
 ・継承したメソッドのみオーバーライドできる
  ( 注意: public や protected 指定のないメソッドは継承されていないので、オーバーライドできない。(オーバーライドしたつもりが、新規メソッド扱いとなる))

 ・引数構成を変えず、メソッド(機能)を変更する

 【継承した場合】
  ・アクセスできる(オブジェクト内の)メンバは、変数のクラス型とは無関係。(new演算子のオブジェクトの型で決まる)
   ⇒ クラスが継承で親から A → B → C とあった場合、
     サブクラスである C でメソッドをオーバーライドしていれば、
     オブジェクトを作成する時の変数の型が A であろうが C であろうが、new演算子で C のオブジェクトを作成していれば、オーバーライドした C のメソッドが起動する。

   (例)
     Aclass a = new Cclass();
      ↑ 変数の方が A だが、new演算子で C のオブジェクトを作成しているので、C のメソッドが起動する。



引っ越し前の記事
シェアする
senをフォローする
プレミア商品・お得商品情報局(予約・再販情報も)


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