Java 1학년

[Java 1학년] 객체 지향 / 폴리모피즘

양상추상츄 2021. 10. 5. 23:21

폴리모피즘

비슷한 객체를 '같은종류'라는 시점에서 생각해 공통된 조작 방법으로 다루는 것


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