ポリモフィズム polymorphism 多相性 多態性

派生関係にあるクラス型のインスタンスを参照できることを言います。
例えば、以下のようなソースコードがあって、

  1 public class Hoge {
  2   Hoge() { }
  3   public void print() {
  4     System.out.println("Hoge World");
  5   }
  6 }   
  1 public class SubHoge extends Hoge {
  2   SubHoge() {
  3     super();
  4   } 
  5   public void print() {
  6     System.out.println("SubHoge World");
  7   } 
  8 
  9   public void printPrint() {
 10     System.out.println("print");
 11   } 
 12 }  
  1 public class Main {
  2   public static void main(String[] args) {
  3     Hoge h;
  4     h =  new Hoge();
  5     h.print();
  6     //h.printPrint();     //エラー
  7     System.out.println();
  8 
  9     SubHoge sh;
 10     sh = new SubHoge();
 11     sh.print();
 12     sh.printPrint();
 13     System.out.println();
 14 
 15     h = sh;
 16     h.print();
 17     //h.printPrint();    //エラー
 18   }
 19 }

以下のような実行結果になります。

$ java Main
Hoge World

SubHoge World
print

SubHoge World

クラスMainの以下の部分

 15     h = sh;
 16     h.print();

ここでは、クラスHoge型のインスタンス参照変数hがクラスSubHoge型のインスタンスを参照するように代入して、そのメンバであるメソッドprintを呼び出しています。
このようなことができます。

注意事項

そのクラス特有のメソッドを派生関係にあるクラスから呼び出すことはできません。
例えば、クラスMainの以下の部分はエラーになります。

 17     //h.printPrint();    //エラー

これは、メソッドprintPrintがクラスSubHoge特有のメソッドであり、クラスHoge型の参照変数からはアクセスできないからです。クラスHoge型の参照変数にSubHoge型のインスタンスを代入したとしても、アクセスすることはできません。
これ重要!!!
完全に勘違いしていた。