┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓ ┃.&&&& **** %%%%.  合格☆Java                   ┃ ┃&&&&&&******%%%%%%  http://www.yscon.co.jp/j/mag          ┃ ┃'&┃&''*┃*''%┃%'             (C)2006 斎藤末広    ┃ ┗━┻━━┻━━┻━━━━━━━━━━━━━━━━━━━━━━━━━━━┛ ┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓  創刊号 2006/03/23  多態性(ポリモフィズム)  今回の内容は,Jマガ第49号の内容と重複します。 ┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━PR━   ┌──────────────────────────────┐   │{2006年春期合格ノート問題編}+{午後試験対策(高度)} │   └──────────────────────────────┘   今回は、私、斎藤がプロデュースした午後試験対策も同時配布しますよ!      さあ、試験勉強なら今すぐダウンロードしてください。 -----------------------------------------------------------------------  ⇒ https://www.techno-brain.co.jp/campaign/06_sp_gokaku/smm/ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 目次 ▼メルマガ「合格☆Java」創刊 ▼多態性(ポリモフィズム)とは ▼インターフェースのポリモフィズム ▼多態性(ポリモフィズム)のメリット ========================================================================= ▼メルマガ「合格☆Java」創刊  新たに,メルマガ「合格☆Java」を発行します。  「合格☆Java」は,無料版と,有料版を発行します。  「合格☆Java」(無料版)は,毎週金曜発行,基本情報に出題される Java 文法解説  「合格☆Java」(有料版)は,月2発行,基本情報技術者試験のJava過去問題解説   300円/月を予定。4月から発行予定です。  なお,「合格☆Java」は,メルマガ「Jマガ」(年に数回発行)の姉妹紙です。  Jマガ「JavaScript&Javaで目指そう!基本情報技術者試験」  ┃  http://www.yscon.co.jp/j/java/jmaga/  「合格☆Java」(無料版)では,春の試験まで,この春のJavaの試験問題でテー マになりそうな文法事項を説明していきます。 ------------------------------------------------------------------------ ▼多態性(ポリモフィズム)とは  今回は,多態性(ポリモフィズム)をします。  次のサンプルを見てください。 1: /* 2: 多態性(ポリモフィズム)の単純な例 3: */ 4: 5: import java.util.Date; 6: 7: class xDate extends Date{ 8: String xaisatu(){ 9: return "おいらは,デェイだ"; 10: } 11: } 12: 13: class yDate extends xDate{ 14: String yyorosiku(){ 15: return "おいらは,デェイだ。よろしく"; 16: } 17: } 18: 19: public class xPoli01{ 20: 21: public static void main(String[] xargs){ 22: 23: xDate xdate = new xDate(); 24: yDate ydate = new yDate(); 25: 26: System.out.println( xdate.xaisatu() ); 27: System.out.println( ydate.yyorosiku() ); 28: 29: System.out.println( ydate.xaisatu() ); // 多態性の例 30: } 31: } クラスの関係  親 Date ↑  子 xDate    ↑  孫 yDate 実行結果は ┏------------------------------------------------------------┓ J:\gj01>java xPoli01 おいらは,デェイだ おいらは,デェイだ。よろしく おいらは,デェイだ ┗------------------------------------------------------------┛ 次の行 29: System.out.println( ydate.xaisatu() ); // 多態性の例 が,オブジェクトの多態性(ポリモフィズム)の例です。  ydate は,本来は,yDate のインスタンスですが,ydate.xaisatu() と親クラス (xDate)のメソッドが実行できます。このように子クラスのオブジェクトが親クラ スのオブジェクトとしても振舞うことを,オブジェクトの多態性(ポリモフィズム) といいます。  子クラスのオブジェクトは,親クラスのオブジェクトとしての形態をもちま すが,逆の,親クラスのオブジェクトは,子クラスのオブジェクトとしての形態 は持ちません。上のプログラムの例でいうと,  xdate.yyorosiku()  は,コンパイルエラーとなります。  多態性(ポリモフィズム)は,もともと,生物学の用語で,ミツバチという同じ DNAをもつものが,女王蜂と働き蜂という形態があることをさします。 ------------------------------------------------------------------------ ▼インターフェースのポリモフィズム  子クラスのオブジェクトが,親クラスのオブジェクトとなるように,オブジェ クトとインターフェースの関係においても,ポリモフィズムがあります。  次のサンプルを見てください。 1: /* 2: 多態性(ポリモフィズム)とインターフェースの単純な例 3: */ 4: 5: import java.util.Date; 6: 7: interface xAisatable { 8: String xaisatu (); 9: } 10: 11: class xDate extends Date implements xAisatable{ 12: public String xaisatu(){ 13: return "おいらは,デェイだ"; 14: } 15: } 16: 17: class xThread extends Thread implements xAisatable { 18: public String xaisatu(){ 19: return "わたしは,スキッパーよ"; 20: } 21: } 22: 23: class xObject extends Object implements xAisatable { 24: public String xaisatu(){ 25: return "わっちは,おばばじゃ。"; 26: } 27: } 28: 29: public class xPoli02{ 30: 31: public static void main(String[] xargs){ 32: 33: xDate xdate = new xDate(); 34: xThread xthread = new xThread(); 35: xObject xobject = new xObject(); 36: 37: xAisatable xkids[] = {xdate, xthread, xobject}; 38: 39: for(int i =0; i < 3; i++){ 40: System.out.println(xkids[i].xaisatu()); 41: } 42: } 43: }  クラス xDate,xThread,xObject は,インターフェスで,xAisatbable を 実装してます。xAisatubale は,挨拶をできるいうインタフェースです。  インターフェースは,私の用語でいうと,"クラスもどき"です。それを 実装するということは,あたかも継承するような感じになります。 37: xAisatable xkids[] = {xdate, xthread, xobject};  ここでは,インターフェース型の変数の配列を定義して,それぞれ, xDate,xThrad,xOject のインスタンス xdate,xthread,xobject を代入 しています。インターフェース型の変数に代入できるというのが, ポリモフィズムです。xdate,xthread,xobject は,本来のクラスの インスタンスという形態のほかに,インターフェース xAisatable の形態も持つ ため,代入ができます。 39: for(int i =0; i < 3; i++){ 40: System.out.println(xkids[i].xaisatu()); 41: } のように扱うことができます。ここでも,親クラスが子クラスのメソッドを実行 できなかったように,xkids[i].toString() のよう書くと,コンパイルエラーと なります。 ------------------------------------------------------------------------ ▼多態性(ポリモフィズム)のメリット 2つあげておきます。 その1 メソッド名一意性の実現  クラスの継承,インターフェースの実装を通じて,メソッド名があらわす意味 の一意性が実現できます。こんな名前のメソッドなら,こんな仕事をするだろう と予想が付きます。  toString() というメソッドは,オブジェクトの中身のうち代表的な内容を文字 列として返してくれます。これは,Objectクラスのメソッドとして,定義してあ るため,toString() の働きが,全てのオブジェクトで保障されます。  このメソッドは,子クラスで,上書き(オーバーライド)することで,子クラス 独自の仕事内容に変更することも出来るし,上書きせずに,そのまま親クラスの ものを使うこともできます。どちらしても,toString()として期待されている 仕事をするということではかわりありません。 その2 オブジェクトのグループ化の実現  クラスを継承,インターフェースの実装することで,親クラスやインターフェース の型をもつものとしてグループ化ができます。 39: for(int i =0; i < 3; i++){ 40: System.out.println(xkids[i].xaisatu()); 41: } のように,配列などの入れて,一つの塊として扱うことができます。これに よって,プログラムの記述がシンプルになります。 ------------------------------------------------------------------------ ▼ 著作権について  このメールマガジンで公開している,プログラムソースは,著作権を当方スタッ フが所有しますが,プログラムソースの利用は,原則,商用を含めて,再利用, 改変,発表を制限しません。どんどんご利用下さい。  質問コーナのプログラムソースは,著作権に問題がある場合があるかもしれま せん。原則を適用しません。再利用の許可をしません。  画像や音などの素材は,それぞれ著作権があります。著作者に承諾なしに再利 用はできません。  本文に関しては,斎藤末広が著作権を所有します。再利用に関しては,承諾を 必要とします。お問い合わせ下さい。 ------------------------------------------------------------------------ ▼アンケート(以下を返信してください)  この号の意見をお待ちしています。ぜひ,ご返信下さい。 この号の内容 1 良かった 2 普通 3 良くなかった コメント,リクエスト,質問もお待ちしています。遠慮せずにどうぞ。