폴리모피즘
비슷한 객체를 '같은종류'라는 시점에서 생각해 공통된 조작 방법으로 다루는 것
CalcQuiz.java
import java.util.Random;
class CalcQuiz { //계산 문제를 1개 만드는 클래스
String question; // 문제를 저장할 필드
String answer; // 답을 저장할 필드
CalcQuiz() { // 생성자
createQuestion();
}
void createQuestion(){
Random rnd = new Random();
int a = rnd.nextInt(100);
int b = rnd.nextInt(100);
this.question = a + "x" + b + "=?";
this.answer = Integer.toString(a * b);
}
String getQuestion() {
return this.question; //문제를 알려주는 메소드
}
String getAnswer() {
return this.answer; //답을 알려주는 메소드
}
}
BinkanQuiz.java
import java.util.Random;
class BinkanQuiz extends CalcQuiz {
BinkanQuiz(){
createQuestion();
}
void createQuestion() {
Random rnd = new Random();
int dan = rnd.nextInt(10); // 몇단인가
int qID = rnd.nextInt(10); // 문제
this.question ="";
this.answer ="";
for(int i=0; i<10; i++) {
if(i == qID) {
this.question += "[O]";
} else {
this.question += "["+(dan*i)+"]";
}
}
this.question += ": O에 들어갈 수는 몇일까요?";
this.answer += dan * qID;
}
}
DaskipQuiz.java
import java.util.Random;
class DaskipQuiz extends CalcQuiz{
DaskipQuiz(){
createQuestion();
}
void createQuestion(){ // 문제를 만든다.
String[] answerWord = {
"안녕하세요","안녕하가세요","맛있어요","이상해요"
}; // 배열
Random rnd = new Random();
int qID = rnd.nextInt(answerWord.length); // 몇번째를 문제로 할 것인가?
this.question = answerWord[qID]; // 문제 저장
for(int i=0; i<3; i++){
int cPos = rnd.nextInt(question.length()); // 자를위치
String firstHalf = this.question.substring(0,cPos); //앞부분
String secondHalf = this.question.substring(cPos); //뒷부분
this.question = firstHalf + "다" + secondHalf; // "다" 입력후 다시 question에 저장
}
this.question += ":다를 빼고 읽어보세요";
this.answer = "다를 빼면," + answerWord[qID];
}
}
Main.java
import java.util.Random;
public class Main {
public static void main(String[] args) {
Random rnd = new Random();
int quizNum = 5;
CalcQuiz[] quiz = new CalcQuiz[quizNum]; // 문제 담을 배열
for(int i = 0; i<quizNum; i++){
int qID = rnd.nextInt(2); // 총문제 종류수가 2개여서 2넣음
if(qID == 0){
quiz[i] = new BinkanQuiz();
} else {
quiz[i] = new DaskipQuiz();
}
}
for(int i=0; i < quizNum; i++){
System.out.println("문제" + i + ":" + quiz[i].getQuestion());
}
System.out.println("-----------------------------");
for(int i=0; i<quizNum; i++){
System.out.println("정답" + i + ":" + quiz[i].getAnswer());
}
}
}
문제0:이상다다다해요:다를 빼고 읽어보세요
문제1:이다다상다해요:다를 빼고 읽어보세요
문제2:[0][9][18][27][36][45][54][63][72][O]: O에 들어갈 수는 몇일까요?
문제3:[0][5][10][15][O][25][30][35][40][45]: O에 들어갈 수는 몇일까요?
문제4:[O][8][16][24][32][40][48][56][64][72]: O에 들어갈 수는 몇일까요?
-----------------------------
정답0:다를 빼면,이상해요
정답1:다를 빼면,이상해요
정답2:81
정답3:20
'Java 1학년' 카테고리의 다른 글
[캡슐화] 필드 제한 / 메소드 구분 하기 (0) | 2022.02.21 |
---|---|
[Java 1학년] 객체 지향 / 상속 (0) | 2021.10.05 |
[Java 1학년] 객체 지향 / 캡슐화 (0) | 2021.10.05 |
[Java 1학년] 객체 지향 (0) | 2021.10.05 |