ポリモーフィズム

ポリモーフィズム(多様性)とは、同じようなものを同じように操作できる機能のことです。

もう少し言うと、同じようなオブジェクトを「同じ種類のものたち」という視点で考えて、共通の操作方法で扱うことです。

Javaでは、ある親クラスから継承して作った複数の子クラスはみんな、親クラスの性質を受け継いだ「同じ種類のものたち」と考えることもできます。メソッドの中身は違うけど、同じように扱えるというわけです。

たとえオーバーライド(上書き)されたとしても、「同じようなことを、それぞれに適した方法で実現しようとしているだけ」なので「同じ命令」と考えることができます。

さらに、子クラスのインスタンスを入れる変数や配列のデータ型を工夫すると、効率よく操作することができます。

CalcQuizクラス(親クラスMushikuiQuizクラス(子クラス)MistakeQuizクラス(子クラス)
createQuestion()、getQuestion()、getAnswer()createQuestion()、getQuestion()、getAnswer()createQuestion()、getQuestion()、getAnswer()

上記の表は「計算問題を作るクラス」を継承して、「虫食い探しクイズ」「間違い探しクイズ」を作ったときのメソッドです。同じ種類のクラスであり、同じメソッドで操作できます。そしてCalcQuizという親クラスのデータ型の配列を作れば、子クラスたちのインスタンスを入れることができます。そしてfor文などでまとめて操作が出来るようになります。

「たぬき言葉クイズ」を作ってみよう

たぬきクイズってご存じですか?「た」ぬきクイズであり、文字列から「た」を抜いて、正しい言葉に直すクイズです。例えは、「たおはよたたう」という文字列があれば、ここから「た」だけ抜いて、「おはよう」という言葉になります。こういったクイズを作ってみましょう。

また、以前作った「虫食いクイズ」「間違い探しクイズ」「たぬき言葉クイズ」をポリモーフィズムを活用しランダムに出すようにしてみましょう。

TanukiQuiz.java

import java.util.Random;
class TanukiQuiz extends CalcQuiz {
TanukiQuiz(){
createQuestion();
}
ランダムをインポートし、たぬき言葉クイズを作る
クラスを作ります。また、ポリモーフィズムを活用してコンストラクタを作ります。
void createQuestion(){
String [ ] answerWord = {“おやすみ”,”楽しい”,”おもしろい”};
問題を1つ作るメソッドを作り、問題にする文字を配列について作ります。
Random rnd = new Random();
int qID = rnd.nextInt(answerWord.length);
this.question = answerWord[qID];
何番目を問題にするかを変数pIDに代入します。
for(int i = 0; i < 3; i++){
int cPos = rnd.nextInt(question.length());
問題数を3つ表示させる
String firstHalf = this.question.substring(0,cPos);
String secondHalf = this.question.substring(cPos);
this.question = firstHalf + “た” + secondHalf;
}
文字列のsubstring()を使うと、文字列を切り分けることができます。ランダムな位置で2つに分け、間に「た」を入れます。
this.question += “:このたぬき言葉を読んでください”;
this.answer = “「た」を抜くと、” + answerWord[qID];
}
}
問題の文字列と答えの文字列を表示させる

Main.java

import java.util.Random;
public class Main {
public static void main(String[] args)
throws Exception {
Random rnd = new Random();
ランダムをインポートし、最初に実行する
クラスを作ります。
int quizNum = 4;
CalcQuiz [ ]quiz = new CalcQuiz[quizNum];
問題数を変数quizNumに代入する。
また問題を作るインスタンスを入れる配列
を作る
for(int i =1; i < quizNum; i++){
int qID = rnd.nextInt(3);
4未満なので、1~3の3つの問題を繰り返す。
0から3のランダムな数を出すを変数qIDに代入する
if(qID == 0){
quiz[i] = new MushikuiQuiz();
}
ゼロのときは、虫食いクイズを表示
else if (qID == 1){
quiz[i] = new MistakeQuiz();
}
1のときは間違い探しクイズを表示
else {
quiz[i] = new TanukiQuiz();
}
}
それ以外はたぬき言葉クイズを表示
for(int i =1; i < quizNum; i++){
System.out.println(“問” + i + “:” + quiz[i].getQuestion());
}
ポリモーフィズムを活用してすべての問題を表示する
System.out.println(“~~~~~~~”);
for(int i = 1; i < quizNum; i++){
System.out.println(“答え” + i + “:” + quiz[i].getAnswer());
}
}
}
ポリモーフィズムを活用してすべての答えを表示する

実行をクリックするたびにランダムに各種の問題が出されるようになりました。

ポリモーフィズムを活用してランダムに問題を出しているのがわかりましたでしょうか。

PHPについて

 この本から引用、参考にして学びました。この本ではキャラクターが対話しながら進み、あきることなく図解などを多用して初心者が始めるにはとても分かりやすい本です。
身に付け消えないスキルが約2,000円ならコスパよく、買っておいてよかったと満足してます。


短期間でのレベルアップにはプロから学ぶのもありです。

キャリアアップに必要なスキルを取得しよう。

オンラインで受講ができるスクールですので、全国どこからでも。

就職・転職支援