
ハイ、やっとたどり着いたねwww
あと3~4記事ぐらいで終わりそうだけどねwww
これまで、サブクラスをスーパークラスの型の変換に代入できることやオーバーロードによってメソッドの機能を変更できることをやりました。
ここではそれらを組み合わせて実現するポリモーフィズムについてやっていきます。
多様性、多態性などともいわれ カプセル化 継承 に続くオブジェクト指向三大要素の一つです。
まずは、オーバーライドメソッドの特質について理解しておきましょう。
それは、
ということです。

上の図は Member型のオブジェクトをObject型変数objに代入した時の様子です。
ちょっとわかりにくいので実際にやってみますwww
package sample18_05;
public class Exec {
public static void main(String[] args) {
Object obj = new Member(118, "田中宏");
System.out.println(obj); // obj.toString()
}
}コレが実際のプログラムというかコードですが…
Member[id=118, name=田中宏]
起動すると上のように文字がコンソールに出てきますwww
オブジェクトはMember型なのでMemberクラスでオーバーライドした
toStringメソッドが起動したわけです。
で、
まとめると 変数型は同じでも中に入れるオブジェクトの型を変えることでメソッドの動作が変わることを
という。
逆に代入するオブジェクトの型を変えることで、
様々な機能に変身させることが可能と!
★ポリモーフィズム
同じ型の変数でも、どんなオブジェクトが入ってるかで動作が変わってしまう
同じ型の変数でも、違う型のオブジェクトを入れることで様々な機能に変身できること
ここからは、あいさつ文のプログラムを
package sample18_06;
public class AmericanGreeting extends Greeting {
@Override
public String language(){
return "American";
}
@Override
public String message(){
return "Hello!";
}
}
package sample18_06;
public class JapaneseGreeting extends Greeting {
@Override
public String language(){
return "Japanese";
}
@Override
public String message(){
return "こんにちは!";
}
}
package sample18_06;
public class Talker {
public void run(Greeting greeting){
System.out.println(greeting.language());
System.out.println(greeting.message());
}
}で、実際に実行していくプログラムを
package sample18_06;
public class Exec {
public static void main(String[] args) {
Talker talker = new Talker();
talker.run(new JapaneseGreeting());
}
}
コンナ感じにwww
日常的なプログラミングでもポリモーフィズムを意識しておくことが大切です。
次の章で学ぶインタフェースが、ポリモーフィズムのもう一つの実現方法を教えてくれます。
ここまでご覧いただきありがとうございました。
BY マんタ
参考書は__________________________________
川場 隆 Kawaba Takashi
秀和システム
______________________________________











