[Java] chapter_07

DEVELOPERS_Ivan ㅣ 2023. 9. 21. 16:00

클래스를 재사용하는 객체지향 기능
-부모클래스의 모든 재산(속성,함수,생성자)을 물려받음

- 부모 클래스 : 범위가 넓은 의미의 클래스
- 상속, super()

- 자식 클래스 : 좁은 범위의 클래스
상속 사용법 : public calss 자식클래스명 extends 부모클래스{}

- 실행 클래스(main)
더보기
package chap07.sec01.exam01;

/**
 * packageName : chap07.sec01.exam01
 * fileName : People
 * author : L.DH
 * date : 2023-09-21
 * description : 부모 클래스 / 상속, super()
 * 요약 : 상속 : 클래스를 재사용하는 객체지향 기능,
 *              말 그대로 부모클래스의 모든 재산(속성,함수,생성자)을 물려받음
 * <p>
 * ===========================================================
 * DATE            AUTHOR             NOTE
 * ———————————————————————————————————————————————————————————
 * 2023-09-21         L.DH         최초 생성
 */

/**
 * 부모 클래스 : 범위가 넓은 의미의 클래스
 */
public class People {
// 속성
    public String name;     // 이름
    public String ssn;      // 주민번호

// 생성자
    public People(String name, String ssn) {
        this.name = name;
        this.ssn = ssn;
    }
}
더보기
package chap07.sec01.exam01;

/**
 * packageName : chap07.sec01.exam01
 * fileName : Student
 * author : L.DH
 * date : 2023-09-21
 * description : 자식 클래스 : 좁은 범위의 클래스
 * 요약 : 상속 사용법 : public calss 자식클래스명 extends 부모클래스{}
 * <p>
 * ===========================================================
 * DATE            AUTHOR             NOTE
 * ———————————————————————————————————————————————————————————
 * 2023-09-21         L.DH         최초 생성
 */
public class Student extends People {
//  속성
    public int studentNo;   //학번

//  생성자 studentNO, 부모 속성까지 모두 : alt + insert
    public Student(String name, String ssn, int studentNo) {
        super(name, ssn);           // TODO : 부모의 매개변수 있는 생성자를 호출함
        this.studentNo = studentNo;
    }
}
더보기
package chap07.sec01.exam01;

/**
 * packageName : chap07.sec01.exam01
 * fileName : StudentApplication
 * author : L.DH
 * date : 2023-09-21
 * description : 실행 클래스(main)
 * 요약 :
 * <p>
 * ===========================================================
 * DATE            AUTHOR             NOTE
 * ———————————————————————————————————————————————————————————
 * 2023-09-21         L.DH         최초 생성
 */
public class StudentApplication {
    public static void main(String[] args) {
//  객체 생성 : 자식(Student)
        Student student = new Student("홍길동", "123456-1234567", 1);
        System.out.println("name : " + student.name);           // 부모 속성
        System.out.println("ssn : " + student.ssn);             // 부모 속성
        System.out.println("studentNo : " + student.studentNo); // 부모 속성
    }
}

함수 = 메소드 재정의(오버라이딩), 자식 클래스

- @Override : 어노테이션(주석) => 자주 사용하는 함수(기능)를 간단히 적용한 것
오버라이딩(overriding) 함수 : alt + insert(자동화 기능 이용)
- 부모 함수 .areaCircle() VS 자식 함수 .areaCircle() (win)
※ 오버라이딩한 자식 함수가 우선이 되어 출력됨

원의 넓이를 구하는 함수
- 정밀하게 계산하고 싶으면 내장 함수 Math.PI(파이) 사용
더보기
package chap07.sec01.exam02;

/**
 * packageName : chap07.sec01.exam02
 * fileName : Calculator
 * author : L.DH
 * date : 2023-09-21
 * description : 부모 클래스
 * 요약 :
 * <p>
 * ===========================================================
 * DATE            AUTHOR             NOTE
 * ———————————————————————————————————————————————————————————
 * 2023-09-21         L.DH         최초 생성
 */

public class Calculator {
//  속성, 생성자 생략
//  함수

    /**
     * 원의 넓이를 구하는 함수
     *
     * @param r
     * @return
     */
    double areaCircle(double r) {
        System.out.println("Calculator 의 areaCircle 실행");
        return 3.14 * r * r;
    }
}
더보기
package chap07.sec01.exam02;

/**
 * packageName : chap07.sec01.exam02
 * fileName : Computer
 * author : L.DH
 * date : 2023-09-21
 * description : 함수 재정의(오버라이딩), 자식 클래스
 * 요약 :
 * 함수 재정의 : (상속관계에서만 해당)
 * 부모 자식 간에 함수 이름 같을 때 사용하는 것,
 * 부모 함수를 사용하지 않고 같은 이름으로 자식의 함수를 사용하고자 할 때 활용함
 * ===========================================================
 * DATE            AUTHOR             NOTE
 * ———————————————————————————————————————————————————————————
 * 2023-09-21         L.DH         최초 생성
 */
public class Computer extends Calculator {
//  TODO : 오버라이딩(overriding) 함수 : alt + insert(자동화 기능 이용)
//  TODO : @Override : 어노테이션(주석) => 자주 사용하는 함수(기능)를 간단히 적용한 것
//  => 기능 : 부모/자식 함수의 이름을 비교해서 이름이 틀리면 에러를 발생 시켜주는 어노테이션

    @Override
    double areaCircle(double r) {
        System.out.println("Computer(자식) 객체의 areaCircle 실행");
        return Math.PI * r * r;    // 원의 넓이 // TODO : (정밀하게 계산하고 싶으면 내장 함수 Math.PI(파이) 사용)
    }
}
더보기
package chap07.sec01.exam02;

/**
 * packageName : chap07.sec01.exam02
 * fileName : CalculatorApplication
 * author : L.DH
 * date : 2023-09-21
 * description : 함수 = 메소드 재정의(오버라이딩)
 * 요약 :
 *
 * <p>
 * ===========================================================
 * DATE            AUTHOR             NOTE
 * ———————————————————————————————————————————————————————————
 * 2023-09-21         L.DH         최초 생성
 */
public class CalculatorApplication {
    public static void main(String[] args) {
        int r = 10; // 반지름
//          객체 생성 : 부모 : Calculator
        Calculator calculator = new Calculator();
        System.out.println("원면적 : " + calculator.areaCircle(r));    // 부모 함수 Calculator 의 areaCircle 실행
        System.out.println("------------------------");
//      객체 생성 : 자식 : Computer
        Computer computer = new Computer();
        // TODO : 부모 함수 .areaCircle() VS 자식 함수 .areaCircle()    (win)
        //        결과 : 오버라이딩한 자식 함수가 우선이 되어 출력됨
        System.out.println("원면적 : " + computer.areaCircle(r));  // Computer(자식) 객체의 areaCircle 실행
    }
}

부모 클래스(공통속성, 공통함수) 사용
- 생성자 부모 .super 정의 없으면 매개변수 수기 작성
더보기
package chap07.sec01.exam04;

/**
 * packageName : chap07.sec01.exam04
 * fileName : CellPhone
 * author : L.DH
 * date : 2023-09-21
 * description : 부모 클래스(공통속성, 공통함수)
 * 요약 :
 * <p>
 * ===========================================================
 * DATE            AUTHOR             NOTE
 * ———————————————————————————————————————————————————————————
 * 2023-09-21         L.DH         최초 생성
 */
public class CellPhone {
// 속성 : 공통속성(일반적인)
    String model;   // 휴대폰 기종(삼성, 애플)
    String color;   // 색깔

// 함수 : 기능
    /**
     * 전원 켜기 함수
     */
    void powerOn() {
        System.out.println("전원을 켭니다.");
    }
    /**
     * 전원 끄기 함수
     */
    void powerOff() {
        System.out.println("전원을 끕니다.");
    }

    /**
     * 벨을 울리는 함수
     */
    void bell() {
        System.out.println("벨이 울립니다.");
    }

    /**
     * 통화기능 함수 : 보내는 기능(송신)
     */
    void sendVoice(String message) {
        System.out.println("나 : " + message);
    }

    /**
     * 통화기능 함수 : 받는 기능(수신)
     */
    void receiveVoice(String message) {
        System.out.println("상대방 : " + message);
    }

    /**
     * 전화 끊기 기능
     */
    void hangUp() {
        System.out.println("전화를 끊습니다.");
    }
}
더보기
package chap07.sec01.exam04;

/**
 * packageName : chap07.sec01.exam04
 * fileName : DmbCellPhone
 * author : L.DH
 * date : 2023-09-21
 * description : 자식 클래스 : tv 수긴 기능, 채널 기능
 * 요약 :
 * <p>
 * ===========================================================
 * DATE            AUTHOR             NOTE
 * ———————————————————————————————————————————————————————————
 * 2023-09-21         L.DH         최초 생성
 */
public class DmbCellPhone extends CellPhone {
// 속성
    int channel; // tv 채널 속성

// 생성자 : 부모 + 자식 속성 모두 : alt + insert

    public DmbCellPhone(String model, String color, int channel) {  // 생성자 부모 .super 정의 없어서 매개변수 수기 작성
        this.model = model;     // 부모속성
        this.color = color;     // 부모속성
        this.channel = channel; // 자식속성
    }
//  전원켜기 / 끄기 등은 상속 받았으므로 정의할 필요 없음
//  함수
    /**
     * tv 수신하는 함수
     */

    void turnOnDmb() {
        System.out.println("채널 : " + channel + "번 방송을 시작합니다.");
    }

    /**
     * 채널 돌리는 함수
     */
    void changeChannelDmb(int channel) {
        this.channel = channel;
        System.out.println("채널 : " + channel + "번으로 돌립니다.");
    }

    /**
     * tv 수신 멈추는 함수
     */
    void turnOffDmb() {
        System.out.println("DMB 방송 수신을 멈춥니다.");
    }
}
더보기
package chap07.sec01.exam04;

/**
 * packageName : chap07.sec01.exam04
 * fileName : CellPhoneApplication
 * author : L.DH
 * date : 2023-09-21
 * description : 실행 클래스
 * 요약 :
 * <p>
 * ===========================================================
 * DATE            AUTHOR             NOTE
 * ———————————————————————————————————————————————————————————
 * 2023-09-21         L.DH         최초 생성
 */
public class CellPhoneApplication {
    public static void main(String[] args) {
//      객체 생성 : Dmb 폰 생성
        DmbCellPhone dmbCellPhone = new DmbCellPhone("자바", "검정", 10);
        System.out.println("모델 : " + dmbCellPhone.model);        // 부모속성
        System.out.println("컬러 : " + dmbCellPhone.color);        // 부모속성
        System.out.println("채널 : " + dmbCellPhone.channel);      // 자식속성

//      전화 걸기
        dmbCellPhone.turnOnDmb();                                 // 전원켜기
        dmbCellPhone.bell();                                      // 통화음
        dmbCellPhone.sendVoice("여보세요");
        dmbCellPhone.receiveVoice("안녕하세요~ 반갑습니다.");
        dmbCellPhone.hangUp();                                    // 전화 끊기

//      tv 수신 : 자식 기능
        dmbCellPhone.turnOnDmb();                                 // tv 켜기
        dmbCellPhone.changeChannelDmb(12);                        // 채널 돌리기
        dmbCellPhone.turnOffDmb();                                // tv 끄기


    }
}

부모 클래스
- final 클래스 : 상속 불가

자식 클래스
- 함수 재정의 : final void stop() : 재정의 안됨 : final 함수
더보기
package chap07.sec01.exam06;

/**
 * packageName : chap07.sec01.exam06
 * fileName : Car
 * author : L.DH
 * date : 2023-09-21
 * description : 부모 클래스 final 함수
 * 요약 :
 * <p>
 * ===========================================================
 * DATE            AUTHOR             NOTE
 * ———————————————————————————————————————————————————————————
 * 2023-09-21         L.DH         최초 생성
 */
public class Car {
// 속성
    public int speed;   // 속도 속성

    /**
     * 속도 증가 함수
     */
    public void speedUp() {
        speed += 1;
    }

    /**
     * final 함수
     */
    public final void stop() {
        System.out.println("차를 멈춤");
        speed = 0;
    }

}
더보기
package chap07.sec01.exam06;

/**
 * packageName : chap07.sec01.exam06
 * fileName : SportsCar
 * author : L.DH
 * date : 2023-09-21
 * description : 자식 클래스
 * 요약 : 함수 재정의 : final void stop() : 재정의 안됨 : final 함수
 * <p>
 * ===========================================================
 * DATE            AUTHOR             NOTE
 * ———————————————————————————————————————————————————————————
 * 2023-09-21         L.DH         최초 생성
 */
public class SportsCar extends Car {
// 함수(메소드) 재정의 : speedUp() : alt + insert
    @Override
    public void speedUp() {
        speed += 10;    // 스포츠카 속도
        System.out.println(speed);
    }
// TODO : 함수 재정의 : final void stop() : 재정의 안됨 : final 함수
}

연습문제) 부모 클래스 완성하기
더보기
package chap07.verify.exam01;

/**
 * packageName : chap07.verify.exam01
 * fileName : StudentApplication
 * author : ds
 * date : 2022-09-30
 * description : 실행 클래스
 * ===========================================================
 * DATE            AUTHOR             NOTE
 * —————————————————————————————
 * 2022-09-30         ds          최초 생성
 */
//  문제 : 아래 자식 클래스 정보를 보고 부모 클래스를 완성하세요
//    Person 클래스 완성하기
public class StudentApplication {
    public static void main(String[] args) {
        Student student = new Student();
        student.set();
//        결과 출력
//        age : 나이
//        name : "홍길동"
//        height : 175
//        weight : 99
        System.out.println("age : " + student.age);
        System.out.println("name : " + student.name);
        System.out.println("height : " + student.height);
        System.out.println("weight : " + student.weight);

    }
}
더보기
package chap07.verify.exam01;

/**
 * packageName : chap07.verify.exam01
 * fileName : Student
 * author : ds
 * date : 2022-09-30
 * description : 자식 클래스
 * ===========================================================
 * DATE            AUTHOR             NOTE
 * —————————————————————————————
 * 2022-09-30         ds          최초 생성
 */
//  문제 : 아래 자식 클래스 정보를 보고 부모 클래스를 완성하세요
//    Person 클래스 완성하기
public class Student extends Person {
    void set() {
        age = 30;        // 부모속성
        name = "홍길동"; // 부모속성
        height = 175; // 부모속성
        setWeight(99); // 부모함수 ( 세터 : alt+insert )
    }
}
더보기
package chap07.verify.exam01;

/**
 * packageName : chap07.verify.exam01
 * fileName : Person
 * author : L.DH
 * date : 2023-09-21
 * description : 연습문제) 부모 클래스
 * 요약 :
 * <p>
 * ===========================================================
 * DATE            AUTHOR             NOTE
 * ———————————————————————————————————————————————————————————
 * 2023-09-21         L.DH         최초 생성
 */
public class Person {
//  속성 정의
    int age;        // 나이
    String name;    // 이름
    int height;     // 키
    int weight;

    public void setWeight(int weight) {
        this.weight = weight;
    }

}

연습문제) 부모 클래스 완성하기
더보기
package chap07.verify.exam02;

/**
 * packageName : chap07.verify.exam02
 * fileName : ColorPointApplication
 * author : ds
 * date : 2022-09-30
 * description : 실행 클래스
 * ===========================================================
 * DATE            AUTHOR             NOTE
 * —————————————————————————————
 * 2022-09-30         ds          최초 생성
 */
// 문제 : 아래 ColorPoint와 실행클래스를 보고
//     부모 클래스 Point를 완성하세요
// 결과 :
//    red(3,4)
public class ColorPointApplication {
    public static void main(String[] args) {
        ColorPoint colorPoint = new ColorPoint();

        colorPoint.set(3,4); // 부모 클래스의 함수 호출
        colorPoint.setColor("red"); // 자식 클래스의 함수 호출 red
        colorPoint.showColorPoint(); // 자식클래스의 함수 호출 (3,4)
    }
}
더보기
package chap07.verify.exam02;

/**
 * packageName : chap07.verify.exam02
 * fileName : ColorPoint
 * author : ds
 * date : 2022-09-30
 * description :
 * ===========================================================
 * DATE            AUTHOR             NOTE
 * —————————————————————————————
 * 2022-09-30         ds          최초 생성
 */
public class ColorPoint extends Point {
    String color; // 점의 색

    public void setColor(String color) {
        this.color = color;
    }

    void showColorPoint() {
        System.out.print(color); // 색깔 출력
        showPoint(); // 부모 클래스의 함수 호출 (3,4)
    }
}
더보기
package chap07.verify.exam02;

/**
 * packageName : chap07.verify.exam02
 * fileName : Point
 * author : L.DH
 * date : 2023-09-21
 * description : 부모 클래스
 * 요약 :
 * <p>
 * ===========================================================
 * DATE            AUTHOR             NOTE
 * ———————————————————————————————————————————————————————————
 * 2023-09-21         L.DH         최초 생성
 */
public class Point {
    //  속성
    int x;  // 3
    int y;  // 4

    //  함수 : set(3, 4), showPoint()
    void set(int x, int y) {
        this.x = x;
        this.y = y;
    }

    void showPoint(){
//  red(3, 4)
        System.out.println("(" + x +", " + y +")");
    }

}

연습문제) 모델 클래스 객체 코딩하기
더보기
package chap07.verify.exam03;

/**
 * packageName : chap07.verify.exam03
 * fileName : PointApplication
 * author : kangtaegyung
 * date : 2023/03/30
 * description :
 * 요약 : 실행 클래스(main)
 * <p>
 * ===========================================================
 * DATE            AUTHOR             NOTE
 * -----------------------------------------------------------
 * 2023/03/30         kangtaegyung          최초 생성
 */
// 연습문제 2: 아래 실행 클래스를 보고 Point 객체를 코딩하세요.
//    속성의 변수명은 x, y 로 하세요
// 결과 :
//     (0,0)
//     (10,20)
public class PointApplication {
    public static void main(String[] args) {
//    객체 생성
        Point point = new Point(); // 기본생성자로 객체생성
        point.showPoint(); // (0,0) 출력

//    객체 생성2
        Point point2 = new Point(10,20); // 매개변수 2개짜리 생성자로 객체 생성
        point2.showPoint(); // (10, 20) 출력

//      객체의 함수 호출

    }
}
더보기
package chap07.verify.exam03;

/**
 * packageName : chap07.verify.exam03
 * fileName : Point
 * author : L.DH
 * date : 2023-09-21
 * description : 연습문제) 모델 클래스 객체 코딩하기
 * 요약 :
 * <p>
 * ===========================================================
 * DATE            AUTHOR             NOTE
 * ———————————————————————————————————————————————————————————
 * 2023-09-21         L.DH         최초 생성
 */
public class Point {
//  속성
    int x;
    int y;

//  객체 생성
//  기본생성자
    public Point() {
    }

//  객체 생성2
//  매개변수 2개짜리 생성자 객체 생성
    public Point(int x, int y) {
        this.x = x;
        this.y = y;
    }
//  객체의 함수 호출
    public void showPoint() {
        System.out.println("(" + x + ", " + y + ")");
    }
}

연습문제)모델 클래스 객체 디자인(코딩)
더보기
package chap07.verify.exam04;

/**
 * packageName : chap07.verify.exam0102
 * fileName : ComputerApplication
 * author : kangtaegyung
 * date : 2023/03/30
 * description : 실행 클래스(main)
 * 요약 :
 * <p>
 * ===========================================================
 * DATE            AUTHOR             NOTE
 * -----------------------------------------------------------
 * 2023/03/30         kangtaegyung          최초 생성
 */
// 아래 샐행 결과를 보고 Computer 객체를 디자인(코딩)하세요
// 결과 :
//    전원을 켭니다.
//    화면을 켭니다.
//    타이핑을 합니다.
//    전원을 끕니다.
public class ComputerApplication {
    public static void main(String[] args) {
        Computer computer = new Computer();

        computer.turnOn(); // "전원을 켭니다." 출력
        computer.displayOn(); // "화면을 켭니다." 출력
        computer.typeOn(); // "타이핑을 합니다." 출력
        computer.turnOff(); // "전원을 끕니다." 출력
    }
}
더보기
package chap07.verify.exam04;

/**
 * packageName : chap07.verify.exam04
 * fileName : Computer
 * author : L.DH
 * date : 2023-09-21
 * description : 연습문제)모델 클래스 객체 디자인(코딩)
 * 요약 :
 * <p>
 * ===========================================================
 * DATE            AUTHOR             NOTE
 * ———————————————————————————————————————————————————————————
 * 2023-09-21         L.DH         최초 생성
 */
public class Computer {
//  객체 생성
    public void turnOn(){
        System.out.println("전원을 켭니다.");
    }
    public void displayOn(){
        System.out.println("화면을 켭니다.");
    }
    public void typeOn(){
        System.out.println("타이핑을 합니다.");
    }
    public void turnOff(){
        System.out.println("전원을 끕니다.");
    }
}

연습문제)모델 클래스 객체 디자인(코딩)
더보기
package chap07.verify.exam05;

/**
 * packageName : chap07.verify.exam0103
 * fileName : PororoApplication
 * author : kangtaegyung
 * date : 2023/03/30
 * description : 실행 클래스(main)
 * 요약 :
 * <p>
 * ===========================================================
 * DATE            AUTHOR             NOTE
 * -----------------------------------------------------------
 * 2023/03/30         kangtaegyung          최초 생성
 */
// 문제 : 아래 실행 클래스를 보고 Penguin 객체를 코딩하세요
// 결과 :
//    뽀로로
//    남극
//    뽀로로 은 남극 살아요!!!!
public class PenguinApplication {
    public static void main(String[] args) {
        Penguin pororo = new Penguin();

        pororo.setName("뽀로로");    // Setter
        pororo.setHabitat("남극");  // Setter

        System.out.println(pororo.getName());      // Getter
        System.out.println(pororo.getHabitat());   // Getter

        pororo.showInfo();  // 결과 : 뽀로로 은 남극 살아요!!!!
    }
}
더보기
package chap07.verify.exam05;

/**
 * packageName : chap07.verify.exam05
 * fileName : Penguin
 * author : L.DH
 * date : 2023-09-21
 * description : 연습문제)모델 클래스 객체 디자인(코딩)
 * 요약 :
 * <p>
 * ===========================================================
 * DATE            AUTHOR             NOTE
 * ———————————————————————————————————————————————————————————
 * 2023-09-21         L.DH         최초 생성
 */
public class Penguin {
//  속성
    String name;
    String habitat;

//  객체 생성
    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getHabitat() {
        return habitat;
    }

    public void setHabitat(String habitat) {
        this.habitat = habitat;
    }

//  함수(메소드)
    public void showInfo() {
        System.out.println(name + " 온 " + habitat + " 살아요!!!!");
    }
}

연습문제)자식 클래스 코딩
더보기
package chap07.verify.exam06;

/**
 * packageName : chap07.verify.exam06
 * fileName : StudentApplication
 * author : kangtaegyung
 * date : 2023/03/30
 * description : 실행 클래스(main)
 * 요약 :
 * <p>
 * ===========================================================
 * DATE            AUTHOR             NOTE
 * -----------------------------------------------------------
 * 2023/03/30         kangtaegyung          최초 생성
 */
// 문제 : 실행클래스와 부모클래스 Person 을 보고 자식 클래스 Student 를 완성하세요
// 결과:
//    홍길동
//    1234567
public class StudentApplication {
    public static void main(String[] args) {
        Student student = new Student("홍길동");

        student.setId("1234567");   // setter : 속성명 String id

        System.out.println(student.getName());  // 홍길동
        System.out.println(student.getId());    // 1234567
    }
}
더보기
package chap07.verify.exam06;

/**
 * packageName : chap07.verify.exam06
 * fileName : Person
 * author : kangtaegyung
 * date : 2023/03/30
 * description : 부모 클래스
 * 요약 :
 * <p>
 * ===========================================================
 * DATE            AUTHOR             NOTE
 * -----------------------------------------------------------
 * 2023/03/30         kangtaegyung          최초 생성
 */
public class Person {
    String name;

    public Person() {}

    public Person(String name) {
        this.name = name;
    }

    public String getName() {
        return name;
    }
}
더보기
package chap07.verify.exam06;

/**
 * packageName : chap07.verify.exam06
 * fileName : Student
 * author : L.DH
 * date : 2023-09-21
 * description : 연습문제)자식 클래스 코딩
 * 요약 :
 * <p>
 * ===========================================================
 * DATE            AUTHOR             NOTE
 * ———————————————————————————————————————————————————————————
 * 2023-09-21         L.DH         최초 생성
 */
public class Student extends Person {
    // 속성
    String id;

    //  생성자
//  기본 생성자
    public Student() {
    }


    //    생성자 : alt + insert
    public Student(String name) {
        super(name);
    }



    public void setId(String id) {
        this.id = id;
    }

    public String getId() {
        return id;
    }
}


연습문제)자식 클래스 객체 디자인(코딩)
더보기
package chap07.verify.exam07;

/**
 * packageName : chap07.verify.exam07
 * fileName : PrinterApplicaton
 * author : kangtaegyung
 * date : 2023/03/30
 * description : 실행 클래스(main)
 * 요약 :
 * <p>
 * ===========================================================
 * DATE            AUTHOR             NOTE
 * -----------------------------------------------------------
 * 2023/03/30         kangtaegyung          최초 생성
 */
// 문제 : 아래 실행클래스의 실행 결과와 부모클래스 Printer 객체를 확인하고,
//        LaserPrinter 자식 객체를 디자인(코딩)하세요
// 결과 :
//    전원켜기
//            기본 프린터 입니다. 기본사양으로 프린팅합니다.
//            레이저프린터로 프린트합니다. 고급 사양으로 프린팅합니다.
//            전원끄기
public class PrinterApplicaton {
    public static void main(String[] args) {
//      부모 객체 생성
        Printer printer = new Printer();
        printer.powerOn(); //   "전원켜기"
        printer.print();     // "기본 프린터 입니다. 기본사양으로 프린팅합니다."

//      자식 객체 생성
//      TODO : print() 함수 재정의        
        LaserPrinter laserPrinter = new LaserPrinter();
        laserPrinter.print();    // "레이저프린터로 프린트합니다. 고급 사양으로 프린팅합니다."
        laserPrinter.powerOff();  // "전원끄기
    }
}
더보기
package chap07.verify.exam07;

/**
 * packageName : chap07.verify.exam07
 * fileName : Printer
 * author : kangtaegyung
 * date : 2023/03/30
 * description : 부모 클래스
 * 요약 :
 * <p>
 * ===========================================================
 * DATE            AUTHOR             NOTE
 * -----------------------------------------------------------
 * 2023/03/30         kangtaegyung          최초 생성
 */
public class Printer {

    public void powerOn(){
        System.out.println("전원켜기");
    }

    public void print() {
        System.out.println("기본 프린터 입니다. 기본사양으로 프린팅합니다.");
    };

    public void powerOff(){
        System.out.println("전원끄기");
    }
}
더보기
package chap07.verify.exam07;

/**
 * packageName : chap07.verify.exam07
 * fileName : LaserPrinter
 * author : L.DH
 * date : 2023-09-21
 * description : 연습문제)자식 클래스 객체 디자인(코딩)
 * 요약 :
 * <p>
 * ===========================================================
 * DATE            AUTHOR             NOTE
 * ———————————————————————————————————————————————————————————
 * 2023-09-21         L.DH         최초 생성
 */
public class LaserPrinter extends Printer {
//  함수(메소드)
    @Override
    public void print() {
        System.out.println("레이저프린터로 프린트합니다. 고급 사양으로 프린팅합니다.");
    }
}

다형성 코드 다형성 예제(필드의 다형성)
- 다형성 코드 : 부모 = 자식 (다형성 코드), 상속 관계에서만 가능
- 목적(장점) : 실행시에 사용방법은 동일하지만 다양한 객체를 이용해서 다양한 실행결과를 나오도록 코딩하고 싶을 때                         사용함
- 기존 소스(As-Is 소스, 레가시 소스), 새로운 소스를 만들어서 계속 바꿔 끼움
- 부모 자료형 = 자식 자료형 : 자동 형변환(큰것 <- 작은것)
- 주의점  : 다형성을 이용해서 만든 객체에서 자식 고유의 함수를 사용하지 못함

- 단형성 코드 : 좌변 우변 동일
더보기
package chap07.sec02.exam01;

/**
 * packageName : chap07.sec02.exam01
 * fileName : ChildApplication
 * author : L.DH
 * date : 2023-09-22
 * description : 실행 클래스 / 다형성 예제(필드의 다형성)
 * 요약 : 다형성 코드 : 부모 = 자식 (다형성 코드), 상속 관계에서만 가능
 * <p>
 * ===========================================================
 * DATE            AUTHOR             NOTE
 * ———————————————————————————————————————————————————————————
 * 2023-09-22         L.DH         최초 생성
 */
public class ChildApplication {
    public static void main(String[] args) {
//   다형성 코드 : 1)
//   TODO : 단형성 코드 : 좌변 우변 동일
        Child3 child3 = new Child3();   // child3 = 자식3 객체가 생성됨
        child3.method2();
        child3.method3();

//   다형성 코드 : 2) OK
//   TODO : 부모 = 자식 (다형성 코드), 상속 관계에서만 가능
//          목적(장점) : 실행시에 사용방법은 동일하지만 다양한 객체를 이용해서
//                      다양한 실행결과를 나오도록 코딩하고 싶을 때 사용함
//          기존 소스(As-Is 소스, 레가시 소스), 새로운 소스를 만들어서 계속 바꿔 끼움
//          부모 자료형 = 자식 자료형 : 자동 형변환(큰것 <- 작은것)
        Parent parent2 = new Child3(); // 부모 parent2 = 자식3
        parent2.method1();
        parent2.method2(); // 부모 함수 (x) / 자식 함수 (o) : 함수 재정의
//      TODO : 주의점 : 다형성을 이용해서 만든 객체(parent2) 에서 자식 고유의 함수를 사용하지 못함
//             parent2.method3(); // 안됨(부모 쪽에 method3 함수가 없기 때문에 불러올 수가 없음)
    }

}
더보기
package chap07.sec02.exam01;

/**
 * packageName : chap07.sec02.exam01
 * fileName : Parent
 * author : L.DH
 * date : 2023-09-22
 * description : 부모 클래스
 * 요약 :
 * <p>
 * ===========================================================
 * DATE            AUTHOR             NOTE
 * ———————————————————————————————————————————————————————————
 * 2023-09-22         L.DH         최초 생성
 */
public class Parent {
    public void method1() {
        System.out.println("부모 method1");
    }

    public void method2() {
        System.out.println("부모 method2");
    }
}
더보기
package chap07.sec02.exam01;

/**
 * packageName : chap07.sec02.exam01
 * fileName : Child
 * author : L.DH
 * date : 2023-09-22
 * description : 자식1
 * 요약 :
 * <p>
 * ===========================================================
 * DATE            AUTHOR             NOTE
 * ———————————————————————————————————————————————————————————
 * 2023-09-22         L.DH         최초 생성
 */
public class Child extends Parent {
    @Override
    public void method2() {
        System.out.println("자식 method2");
    }
}
더보기
package chap07.sec02.exam01;

/**
 * packageName : chap07.sec02.exam01
 * fileName : Child2
 * author : L.DH
 * date : 2023-09-22
 * description : 자식2
 * 요약 :
 * <p>
 * ===========================================================
 * DATE            AUTHOR             NOTE
 * ———————————————————————————————————————————————————————————
 * 2023-09-22         L.DH         최초 생성
 */
public class Child2 extends Parent {
    @Override
    public void method2() {
        System.out.println("자식2 method2");
    }
}
더보기
package chap07.sec02.exam01;

/**
 * packageName : chap07.sec02.exam01
 * fileName : Child3
 * author : L.DH
 * date : 2023-09-22
 * description : 자식3
 * 요약 :
 * <p>
 * ===========================================================
 * DATE            AUTHOR             NOTE
 * ———————————————————————————————————————————————————————————
 * 2023-09-22         L.DH         최초 생성
 */
public class Child3 extends Parent {
//      method2() 오버라이딩 : alt + insert
    @Override
    public void method2() {
        System.out.println( "자식3 method2" );
    }

//  자식 3의 고유함수
    public void method3() {
        System.out.println( "자식3 method3" );
    }
}

매개변수의(함수) 다형성
전략 클래스 : 디자인 패턴(23)_행위(11)_전략 패턴 1
- 정의 : drive(부모 클래스 부모객체) {} => drive(자식객체); (실행시에) => 부모 객체 = 자식 객체(형태)
- 매개변수의 다형성 이용 : 객체에 따라 결과가 달라짐
더보기
package chap07.sec02.exam02;

/**
 * packageName : chap07.sec02.exam02
 * fileName : DriverApplictaion
 * author : L.DH
 * date : 2023-09-22
 * description : 실행 클래스 / 매개변수의(함수) 다형성
 * 요약 :
 * <p>
 * ===========================================================
 * DATE            AUTHOR             NOTE
 * ———————————————————————————————————————————————————————————
 * 2023-09-22         L.DH         최초 생성
 */
public class DriverApplictaion {
    public static void main(String[] args) {
//      전략 클래스 : Driver(운전자) 객체 생성
        Driver driver = new Driver();
        
//      자식 객체 : Bus, Taxi 생성
        Bus bus = new Bus();
        Taxi taxi = new Taxi();

//      TODO : 매개변수의 다형성 이용 : 객체에 따라 결과가 달라짐
        driver.drive(bus);   // bus 자식 객체 ? // 결과 : 버스가 달립니다.
        driver.drive(taxi);  // bus 자식 객체 ? // 결과 : 택시가 달립니다.


    }
}
더보기
package chap07.sec02.exam02;

/**
 * packageName : chap07.sec02.exam02
 * fileName : Driver
 * author : L.DH
 * date : 2023-09-22
 * description : 전략 클래스 : 디자인 패턴(23)_행위(11)_전략 패턴 1
 * 요약 :
 * <p>
 * ===========================================================
 * DATE            AUTHOR             NOTE
 * ———————————————————————————————————————————————————————————
 * 2023-09-22         L.DH         최초 생성
 */
public class Driver {
//  TODO : 부모 객체 = 자식 객체(다형성)
//       정의 : drive(부모 클래스 부모객체) {} => drive(자식객체); (실행시에)
//             => 부모 객체 = 자식 객체(형태)
    public void drive(Vehicle vehicle) {
        vehicle.run();  // 부모 클래스의 run() 실행 : 오버라이딩에 의해 자식 run() 실행됨
    }

}
더보기
package chap07.sec02.exam02;

/**
 * packageName : chap07.sec02.exam02
 * fileName : Vehicle
 * author : L.DH
 * date : 2023-09-22
 * description : 부모 클래스
 * 요약 :
 * <p>
 * ===========================================================
 * DATE            AUTHOR             NOTE
 * ———————————————————————————————————————————————————————————
 * 2023-09-22         L.DH         최초 생성
 */
public class Vehicle {
    public void run() {
        System.out.println("차량이 달립니다.");
    }
}
더보기
package chap07.sec02.exam02;

/**
 * packageName : chap07.sec02.exam02
 * fileName : Bus
 * author : L.DH
 * date : 2023-09-22
 * description : 버스 자식 클래스
 * 요약 :
 * <p>
 * ===========================================================
 * DATE            AUTHOR             NOTE
 * ———————————————————————————————————————————————————————————
 * 2023-09-22         L.DH         최초 생성
 */
public class Bus extends Vehicle {
    //  run() 오버라이딩하세요 : alt + insert : "버스가 달립니다."
    @Override
    public void run() {
        System.out.println("버스가 달립니다.");
    }
}
더보기
package chap07.sec02.exam02;

/**
 * packageName : chap07.sec02.exam02
 * fileName : Taxi
 * author : L.DH
 * date : 2023-09-22
 * description : 택시 자식 클래스
 * 요약 :
 * <p>
 * ===========================================================
 * DATE            AUTHOR             NOTE
 * ———————————————————————————————————————————————————————————
 * 2023-09-22         L.DH         최초 생성
 */
public class Taxi extends Vehicle {
    //  run() 오버라이딩하세요 : alt + insert : "택시가 달립니다."
    @Override
    public void run() {
        System.out.println("택시가 달립니다.");
    }
}

 

강제형변환해서 자식 객체로 원복
- (작은것(자식) -> 큰것(부모) : 자동), (큰것(부모) -> 작은것(자식) : 수동)
더보기
package chap07.sec02.exam03;

/**
 * packageName : chap07.sec02.exam03
 * fileName : ChildApplication
 * author : L.DH
 * date : 2023-09-22
 * description : 실행 클래스
 * 요약 :
 * <p>
 * ===========================================================
 * DATE            AUTHOR             NOTE
 * ———————————————————————————————————————————————————————————
 * 2023-09-22         L.DH         최초 생성
 */
public class ChildApplication {
    public static void main(String[] args) {
//  다형성 이용 객체 생성
//  TODO : 부모 객체 = 자식 객체
//         부모클래스 객체변수 = new 자식생성자();
        Parent parent = new Child();

        parent.field1 = "data1";
        parent.method1();
        parent.method2();
//  TODO : 자식의(child) 고유함수 사용못함
//      parent.method3(); // x

//  예제 1) 위에서 다형성을 이용했는데 부득이하게 지식함수와 속성을 사용할 일이 생겼음
//  TODO : 강제형변환해서 자식 객체로 원복
    Child child = (Child) parent;   // TODO : (작은것(자식) -> 큰것(부모) : 자동), (큰것(부모) -> 작은것(자식) : 수동)
    child.field2 = "data2";         // 고유 속성 사용
    child.method3();                // 고유 함수 실행
    }
}
더보기
package chap07.sec02.exam03;

/**
 * packageName : chap07.sec02.exam03
 * fileName : Parent
 * author : L.DH
 * date : 2023-09-22
 * description : 부모 클래스
 * 요약 :
 * <p>
 * ===========================================================
 * DATE            AUTHOR             NOTE
 * ———————————————————————————————————————————————————————————
 * 2023-09-22         L.DH         최초 생성
 */
public class Parent {
    public String field1;

    public void method1() {
        System.out.println("부모 함수1");
    }
    public void method2() {
        System.out.println("부모 함수2");
    }
}
더보기
package chap07.sec02.exam03;

/**
 * packageName : chap07.sec02.exam03
 * fileName : Child
 * author : L.DH
 * date : 2023-09-22
 * description : 자식 클래스
 * 요약 :
 * <p>
 * ===========================================================
 * DATE            AUTHOR             NOTE
 * ———————————————————————————————————————————————————————————
 * 2023-09-22         L.DH         최초 생성
 */
public class Child extends Parent {
    public String field2;

    public void method3() {
        System.out.println("자식 함수3");
    }

}

instanceOf 연산자
- 목적 : 객체가 자식 클래스인지 확인하는 용도
- 사용법 : 부모객체 instanceOf 자식 클래스
더보기
package chap07.sec02.exam04;

/**
 * packageName : chap07.sec02.exam04
 * fileName : ChildApplication
 * author : L.DH
 * date : 2023-09-22
 * description : 실행 클래스, instanceOf 연산자
 * 요약 :
 * <p>
 * ===========================================================
 * DATE            AUTHOR             NOTE
 * ———————————————————————————————————————————————————————————
 * 2023-09-22         L.DH         최초 생성
 */
public class ChildApplication {
    //  정적(공유, 전역) 함수
    public static void method1(Parent parent) {
//  TODO : 사용법 : 부모객체 instanceOf 자식 클래스
//           목적 : 객체가 자식 클래스인지 확인하는 용도
        if (parent instanceof Child) {
//      강제 형변환 실시 : 자식 객체 원본(큰것(자식) -> 작은것(부모) : 수동)
            Child child = (Child) parent;
            System.out.println("강제형변환 성공");
        } else {
            System.out.println("강제형변환 실패");
        }

    }

    public static void main(String[] args) {
//  다형성 이용 객체 생성
    Parent parent = new Child();
    method1(parent);    // 자식객체 들어간 부모객체를 전달
    }
}
더보기
package chap07.sec02.exam04;

/**
 * packageName : chap07.sec02.exam04
 * fileName : Parent
 * author : L.DH
 * date : 2023-09-22
 * description : 부모 클래스
 * 요약 :
 * <p>
 * ===========================================================
 * DATE            AUTHOR             NOTE
 * ———————————————————————————————————————————————————————————
 * 2023-09-22         L.DH         최초 생성
 */
public class Parent {
}
더보기
package chap07.sec02.exam04;

/**
 * packageName : chap07.sec02.exam04
 * fileName : Child
 * author : L.DH
 * date : 2023-09-22
 * description : 자식 클래스
 * 요약 :
 * <p>
 * ===========================================================
 * DATE            AUTHOR             NOTE
 * ———————————————————————————————————————————————————————————
 * 2023-09-22         L.DH         최초 생성
 */
public class Child extends Parent {
}

추상 클래스
- 활용 : 자식 클래스를 만들어서 상속받아 사용해야함
- 목적 : 프로젝트에서 개발자 많을 떄 함수이름과 속성이름을 통일시킬 목적으로 사용함
- 사용법 : public abstract class 클래스명
더보기
package chap07.sec03.exam01;

/**
 * packageName : chap07.sec03.exam01
 * fileName : SmartPhoneApplication
 * author : L.DH
 * date : 2023-09-22
 * description : 실행 클래스
 * 요약 :
 * <p>
 * ===========================================================
 * DATE            AUTHOR             NOTE
 * ———————————————————————————————————————————————————————————
 * 2023-09-22         L.DH         최초 생성
 */
public class SmartPhoneApplication {
    public static void main(String[] args) {
//    객체 생성
//    TODO : Phone 추상클래스 : 생성 못함
//    Phone phone = new Phone("홍길동");
        SmartPhone smartPhone = new SmartPhone("홍길동");
//      TODO : 활용 : 자식 클래스를 만들어서 상속받아 사용해야함
//      TODO : 목적 : 프로젝트에서 개발자 많을 떄 함수이름과 속성이름을 통일시킬 목적으로 사용함
        smartPhone.turnOn();            // 전원켜기
        smartPhone.internetSearch();    // 인터넷 검색
        smartPhone.turnOff();           // 전원끄기
    }
}
더보기
package chap07.sec03.exam01;

/**
 * packageName : chap07
 * fileName : Phone
 * author : L.DH
 * date : 2023-09-22
 * description : 추상 클래스
 * 요약 : public abstract class 클래스명
 * 활용 : 자식 클래스를 만들어서 상속받아 사용해야함
 * 목적 : 프로젝트에서 개발자 많을 떄 함수이름과 속성이름을 통일시킬 목적으로 사용함
 * <p>
 * ===========================================================
 * DATE            AUTHOR             NOTE
 * ———————————————————————————————————————————————————————————
 * 2023-09-22         L.DH         최초 생성
 */
public abstract class Phone {
    public String owner;

    //  매개 1개짜리 생성자 : alt + insert
    public Phone(String owner) {
        this.owner = owner;
    }

    // 전원 키는 함수
    public void turnOn() {
        System.out.println("폰 전원을 켭니다.");
    }

    // 전원 끄는 함수
    public void turnOff() {
        System.out.println("폰 전원을 끕니다.");
    }
}
더보기
package chap07.sec03.exam01;

/**
 * packageName : chap07.sec03.exam01
 * fileName : SmartPhone
 * author : L.DH
 * date : 2023-09-22
 * description : 
 * 요약 :
 * <p>
 * ===========================================================
 * DATE            AUTHOR             NOTE
 * ———————————————————————————————————————————————————————————
 * 2023-09-22         L.DH         최초 생성
 */
public class SmartPhone extends Phone{
    //    생성자 : alt + insert
    public SmartPhone(String owner) {
        super(owner);
    }
    public void internetSearch() {
        System.out.println("인터넷 검색을 합니다.");
    }
}
추상클래스 / 추상함수(메소드) 만들기
- 사용법 : 접근제한자 abstract 리턴자료형 함수명();
- 함수의 선언부(정의부)만 있고, 실행블럭 {} 이 없음
- 특징 : 자식클래스에서 무조건 오버라이딩 함수를 만들어야함
더보기
package chap07.sec03.exam02;

/**
 * packageName : chap07.sec03.exam02
 * fileName : Animal
 * author : L.DH
 * date : 2023-09-22
 * description : 추상클래스 / 추상함수(메소드)
 * 요약 :
 * <p>
 * ===========================================================
 * DATE            AUTHOR             NOTE
 * ———————————————————————————————————————————————————————————
 * 2023-09-22         L.DH         최초 생성
 */
public abstract class Animal {
    public String kind; // 종류(종)

    public void breathe() {
        System.out.println("숨을 쉽니다.");
    }

//  TODO: 추상 함수 만들기
//   사용법 : 접근제한자 abstract 리턴자료형 함수명();
//   함수의 선언부(정의부)만 있고, 실행블럭 {} 이 없음
//   특징 : 자식클래스에서 무조건 오버라이딩 함수를 만들어야함
    public abstract void sound();
}
더보기
package chap07.sec03.exam02;

/**
 * packageName : chap07.sec03.exam02
 * fileName : AnimalApplication
 * author : L.DH
 * date : 2023-09-22
 * description : 실행 클래스
 * 요약 :
 * <p>
 * ===========================================================
 * DATE            AUTHOR             NOTE
 * ———————————————————————————————————————————————————————————
 * 2023-09-22         L.DH         최초 생성
 */
public class AnimalApplication {
    public static void main(String[] args) {
//      자식 객체
        Dog dog = new Dog();        // 멍멍
        Cat cat = new Cat();        // 야옹

        dog.sound();
        cat.sound();

        System.out.println("------------------------------");
        
//      TODO : 2)  사용목적 : 다형성 이용
//       사용법 : 부모 객체  = new 자식생성자()
        Animal animal = new Dog();
        animal.sound();             // 멍멍

        animal = new Cat();
        animal.sound();             // 야옹
    }
}
더보기
package chap07.sec03.exam02;

/**
 * packageName : chap07.sec03.exam02
 * fileName : Cat
 * author : L.DH
 * date : 2023-09-22
 * description : 자식 클래스
 * 요약 :
 * <p>
 * ===========================================================
 * DATE            AUTHOR             NOTE
 * ———————————————————————————————————————————————————————————
 * 2023-09-22         L.DH         최초 생성
 */
public class Cat extends Animal {
//  생성자 : alt + insert
    public Cat() {
        this.kind = "포유류";
    }

// 재정의 함수 제작 : alt + insert
// TODO : 메소드 구현(구현할 메서드 선택) : 필수적으로 재정의를 해야할 함수를 알려줌
    @Override
    public void sound() {
        System.out.println("야옹");
    }
}


더보기
package chap07.sec03.exam02;

/**
 * packageName : chap07.sec03.exam02
 * fileName : Dog
 * author : L.DH
 * date : 2023-09-22
 * description : 자식 클래스
 * 요약 :
 * <p>
 * ===========================================================
 * DATE            AUTHOR             NOTE
 * ———————————————————————————————————————————————————————————
 * 2023-09-22         L.DH         최초 생성
 */
public class Dog extends Animal {
    // 생성자
    public Dog() {
        this.kind = "포유류";
    }

// 재정의 함수 제작 : alt + insert
    @Override
    public void sound() {
        System.out.println("멍멍");
    }
}

연습문제) 다형성 디자인(코딩)
더보기
package chap07.verify.exam08;

/**
 * packageName : chap07.verify.exam08
 * fileName : CalculatorApplication
 * author : ds
 * date : 2022-09-30
 * description : 실행 클래스, 연습문제) 다형성
 * ===========================================================
 * DATE            AUTHOR             NOTE
 * —————————————————————————————
 * 2022-09-30         ds          최초 생성
 */
// 문제 : 실행 클래스의 결과와 Calculator(추상클래스)를 확인해서
//       자식 클래스 GoodCalc 디자인(코딩)하세요.
// 결과 :
//    5
//    -1
//    3.0
public class CalculatorApplication {
    public static void main(String[] args) {
        GoodCalc goodCalc = new GoodCalc();

        System.out.println(goodCalc.add(2,3));
        System.out.println(goodCalc.subtract(2,3));
        System.out.println(goodCalc.average(new int[]{2,3,4}));
    }
}
더보기
package chap07.verify.exam08;

/**
 * packageName : chap07.verify.exam08
 * fileName : Calculator
 * author : ds
 * date : 2022-09-30
 * description : 추상 클래스
 * ===========================================================
 * DATE            AUTHOR             NOTE
 * —————————————————————————————
 * 2022-09-30         ds          최초 생성
 */
public abstract class Calculator {
    //    두 정수의 합을 구하여 리턴
    public abstract int add(int a, int b);

    //    두 정수의 차를 구하여 리턴
    public abstract int subtract(int a, int b);

    // 배열에 저장된 정수의 평균을 구해 실수로 리턴
    public abstract double average(int[] a);

}
더보기
package chap07.verify.exam08;

/**
 * packageName : chap07.verify.exam08
 * fileName : GoodCalc
 * author : L.DH
 * date : 2023-09-22
 * description : 자식 클래스
 * 요약 :
 * <p>
 * ===========================================================
 * DATE            AUTHOR             NOTE
 * ———————————————————————————————————————————————————————————
 * 2023-09-22         L.DH         최초 생성
 */
public class GoodCalc extends Calculator {
    // 함수(메소드)
    @Override
    public int add(int a, int b) {
        return a + b;
    }

    @Override
    public int subtract(int a, int b) {
        return a - b;
    }

    @Override
    public double average(int[] a) {
        double sum = 0;
        for (int i = 0; i < a.length; i++) {
            sum = sum + a[i];
        }
        return (double) sum / (double) a.length;
    }
}
연습문제) 다형성 디자인(코딩)
더보기
package chap07.verify.exam09;

/**
 * packageName : chap07.verify.exam09
 * fileName : PrinterApplication
 * author : kangtaegyung
 * date : 2023/03/30
 * description : 연습문제) 다형성
 * 요약 :
 * <p>
 * ===========================================================
 * DATE            AUTHOR             NOTE
 * -----------------------------------------------------------
 * 2023/03/30         kangtaegyung          최초 생성
 */
// 문제 : 아래문제는 속성의 다형성을 이용해서 실행시점에 동적으로 결과를 변경하고 있다.
//    부모인 Printer 객체를 확인하고,
//    LaserPrinter 와 ColorPrint 객체를 디자인(코딩) 하세요
//  결과 :
//    전원켜기
//    기본 프린터 입니다. 기본사양으로 프린팅합니다.
//    레이저프린터로 업그레이드 했습니다.
//    컬러프린터로 업그레이드 했습니다.
//    전원끄기
public class PrinterApplication {
    public static void main(String[] args) {
        //      부모 객체 생성
        Printer printer = new Printer();
        printer.powerOn(); //   "전원켜기"
        printer.print();     // "기본 프린터 입니다. 기본사양으로 프린팅합니다."

        //  속성의 다형성 이용 : 레이저 프린터로 변경
        printer = new LaserPrinter();
        printer.print();    // "레이저프린터로 업그레이드 했습니다."

//        속성의 다형성 이용 : 컬러 프린터로 변경
        printer = new ColorPrinter();
        printer.print();      // "컬러프린터로 업그레이드 했습니다."
        printer.powerOff();  // "전원끄기
    }
}
더보기
package chap07.verify.exam09;

/**
 * packageName : chap07.verify.exam09
 * fileName : Printer
 * author : kangtaegyung
 * date : 2023/03/30
 * description :
 * 요약 :
 * <p>
 * ===========================================================
 * DATE            AUTHOR             NOTE
 * -----------------------------------------------------------
 * 2023/03/30         kangtaegyung          최초 생성
 */
public class Printer {
    public void powerOn(){
        System.out.println("전원켜기");
    }

    public void print() {
        System.out.println("기본 프린터 입니다. 기본사양으로 프린팅합니다.");
    };

    public void powerOff(){
        System.out.println("전원끄기");
    }
}
더보기
package chap07.verify.exam09;

/**
 * packageName : chap07.verify.exam09
 * fileName : LaserPrinter
 * author : L.DH
 * date : 2023-09-22
 * description :
 * 요약 : 자식 클래스
 * <p>
 * ===========================================================
 * DATE            AUTHOR             NOTE
 * ———————————————————————————————————————————————————————————
 * 2023-09-22         L.DH         최초 생성
 */
public class LaserPrinter extends Printer {
    @Override
    public void print() {
        System.out.println("레이저프린터로 업그레이드 했습니다.");
    }

}
더보기
package chap07.verify.exam09;

/**
 * packageName : chap07.verify.exam09
 * fileName : ColorPrinter
 * author : L.DH
 * date : 2023-09-22
 * description :
 * 요약 : 자식 클래스
 * <p>
 * ===========================================================
 * DATE            AUTHOR             NOTE
 * ———————————————————————————————————————————————————————————
 * 2023-09-22         L.DH         최초 생성
 */
public class ColorPrinter extends Printer {
    @Override
    public void print() {
        System.out.println("컬러프린터로 업그레이드 했습니다.");
    }

}

연습문제)다형성(매개변수) 디자인 코딩
더보기
package chap07.verify.exam10;

/**
 * packageName : chap07.verify.exam10
 * fileName : MethodApplication
 * author : ds
 * date : 2022-09-30
 * description : 실행 클래스, 연습문제)다형성(매개변수) 디자인 코딩
 * ===========================================================
 * DATE            AUTHOR             NOTE
 * —————————————————————————————
 * 2022-09-30         ds          최초 생성
 */
// 문제 : 아래는 매개변수의 다형성을 이용한 예제입니다.
//     아래 소스를 보고 자식 클래스들을 완성하세요
// 결과 :
//    Line
//    Shape
//    Rect
//    Circle
public class MethodApplication {
    
    static void paint(Shape p) {
        p.draw();
    }
    
    public static void main(String[] args) {
        Shape shape = new Shape();

        MethodApplication.paint(shape); // Shape의 draw() 실행. "Shape" 출력
        MethodApplication.paint(new Line()); // Shape의 draw() 실행. "Line" 출력
        MethodApplication.paint(new Rect()); // Rect의 draw() 실행. "Rect" 출력
        MethodApplication.paint(new Circle()); // Circle의 draw() 실행. "Circle" 출력

//        자바의 객체 배열
//        Shape[] shapes = new Shape[]{new Line(), new Shape(),new Rect(),new Circle() };
//
//        for(Shape shape : shapes) {
//            paint(shape);
//        }
    }
}
더보기
package chap07.verify.exam10;

/**
 * packageName : chap07.verify.exam10
 * fileName : Shape
 * author : ds
 * date : 2022-09-30
 * description : 부모 클래스
 * ===========================================================
 * DATE            AUTHOR             NOTE
 * —————————————————————————————
 * 2022-09-30         ds          최초 생성
 */
public class Shape {
    public void draw() {
        System.out.println("Shape");
    }
}
더보기
package chap07.verify.exam10;

/**
 * packageName : chap07.verify.exam10
 * fileName : Line
 * author : L.DH
 * date : 2023-09-22
 * description : 자식 클래스
 * 요약 :
 * <p>
 * ===========================================================
 * DATE            AUTHOR             NOTE
 * ———————————————————————————————————————————————————————————
 * 2023-09-22         L.DH         최초 생성
 */
public class Line extends Shape {
    @Override
    public void draw() {
        System.out.println("Line");
    }
}
더보기
package chap07.verify.exam10;

/**
 * packageName : chap07.verify.exam10
 * fileName : Rect
 * author : L.DH
 * date : 2023-09-22
 * description : 자식 클래스
 * 요약 :
 * <p>
 * ===========================================================
 * DATE            AUTHOR             NOTE
 * ———————————————————————————————————————————————————————————
 * 2023-09-22         L.DH         최초 생성
 */
public class Rect extends Shape {
    @Override
    public void draw() {
        System.out.println("Rect");
    }
}
더보기
package chap07.verify.exam10;

/**
 * packageName : chap07.verify.exam10
 * fileName : Circle
 * author : L.DH
 * date : 2023-09-22
 * description : 자식 클래스
 * 요약 :
 * <p>
 * ===========================================================
 * DATE            AUTHOR             NOTE
 * ———————————————————————————————————————————————————————————
 * 2023-09-22         L.DH         최초 생성
 */
public class Circle extends Shape {
    @Override
    public void draw() {
        System.out.println("Circle");
    }
}
연습문제)다형성 리턴 값이 있는 함수 만들기
더보기
package chap07.verify.exam11;

/**
 * packageName : chap07.verify.exam05
 * fileName : OverridingApplication
 * author : ds
 * date : 2022-09-30
 * description : 연습문제)다형성 리턴 값이 있는 함수 만들기
 * ===========================================================
 * DATE            AUTHOR             NOTE
 * —————————————————————————————
 * 2022-09-30         ds          최초 생성
 */
// 문제 : 다형성을 이용한 예제, 아래 클래스를 보고 Weapon(부모클래스) 클래스와
//      Cannon(자식클래스) 클래스를 완성하세요.
// 결과 :
//    기본 무기의 살상 능력은 1
//    대포의 살상 능력은 10
public class OverridingApplication {
    public static void main(String[] args) {
//      TODO :  weapon.fire() : 리턴 값이 있는 함수
        Weapon weapon = new Weapon();
        System.out.println("기본 무기의 살상 능력은 " + weapon.fire());

        weapon = new Cannon();
        System.out.println("대포의 살상 능력은 " + weapon.fire());
    }

}
더보기
package chap07.verify.exam11;

/**
 * packageName : chap07.verify.exam11
 * fileName : Weapon
 * author : L.DH
 * date : 2023-09-22
 * description : 부모 클래스
 * 요약 :
 * <p>
 * ===========================================================
 * DATE            AUTHOR             NOTE
 * ———————————————————————————————————————————————————————————
 * 2023-09-22         L.DH         최초 생성
 */
public class Weapon {
    public int fire() {
        return 1;
    }

}
더보기
package chap07.verify.exam11;

/**
 * packageName : chap07.verify.exam11
 * fileName : Cannon
 * author : L.DH
 * date : 2023-09-22
 * description : 자식 클래스
 * 요약 :
 * <p>
 * ===========================================================
 * DATE            AUTHOR             NOTE
 * ———————————————————————————————————————————————————————————
 * 2023-09-22         L.DH         최초 생성
 */
public class Cannon extends Weapon {
    @Override
    public int fire() {
        return 10;
    }

}

연습문제)추상 클래스 다형성 디자인 코딩
더보기
package chap07.verify.exam12;

/**
 * packageName : chap07.verify.exam12
 * fileName : NoteBookApplication
 * author : kangtaegyung
 * date : 2023/03/30
 * description : 연습문제)다형성 디자인 코딩
 * 요약 :
 * <p>
 * ===========================================================
 * DATE            AUTHOR             NOTE
 * -----------------------------------------------------------
 * 2023/03/30         kangtaegyung          최초 생성
 */
// 문제 : 아래 실행클래스의 실행결과와 추상 클래스의 Computer 객체를 보고
//      DeskTop , NoteBook 객체를 디자인(코딩) 하세요
// 결과 :
//    전원을 켭니다.
//    DeskTop Display()
//    DeskTop Typing()
//    NoteBook Display()
//    NoteBook Typing()
//    전원을 끕니다.
public class NoteBookApplication {
    public static void main(String[] args) {
        Computer computer = new DeskTop();

        computer.turnOn();       // "전원을 켭니다."
        computer.display();      // "DeskTop Display()"
        computer.typing();       // "DeskTop Typing()"

        computer = new NoteBook(); // 데스크탑 -> 노트북으로 변경

        computer.display();      // "NoteBook Display()"
        computer.typing();       // NoteBook Typing()
        computer.turnOff();         // "전원을 끕니다."
    }
}
더보기
package chap07.verify.exam12;

/**
 * packageName : chap07.verify.exam12
 * fileName : Computer
 * author : kangtaegyung
 * date : 2023/03/30
 * description : 추상 클래스
 * 요약 :
 * <p>
 * ===========================================================
 * DATE            AUTHOR             NOTE
 * -----------------------------------------------------------
 * 2023/03/30         kangtaegyung          최초 생성
 */
public abstract class Computer {
    public abstract void display();
    public abstract void typing();
    public void turnOn()
    {
        System.out.println("전원을 켭니다.");
    }
    public void turnOff()
    {
        System.out.println("전원을 끕니다.");
    }
}
더보기
package chap07.verify.exam12;

/**
 * packageName : chap07.verify.exam12
 * fileName : DeskTop
 * author : L.DH
 * date : 2023-09-22
 * description : 자식 클래스
 * 요약 :
 * <p>
 * ===========================================================
 * DATE            AUTHOR             NOTE
 * ———————————————————————————————————————————————————————————
 * 2023-09-22         L.DH         최초 생성
 */
public class DeskTop extends Computer {
    @Override
    public void display() {
        System.out.println("DeskTop Display()");
    }

    @Override
    public void typing() {
        System.out.println("DeskTop Typing()");
    }

}
더보기
package chap07.verify.exam12;

/**
 * packageName : chap07.verify.exam12
 * fileName : NoteBook
 * author : L.DH
 * date : 2023-09-22
 * description : 자식 클래스
 * 요약 :
 * <p>
 * ===========================================================
 * DATE            AUTHOR             NOTE
 * ———————————————————————————————————————————————————————————
 * 2023-09-22         L.DH         최초 생성
 */
public class NoteBook extends Computer {
    @Override
    public void display() {
        System.out.println("NoteBook Display()");

    }

    @Override
    public void typing() {
        System.out.println("NoteBook Typing()");
    }
}

'Java' 카테고리의 다른 글

[Java] chapter_10  (0) 2023.09.25
[Java] chapter_08  (0) 2023.09.22
[Java] chapter_06  (0) 2023.09.20
[Java] chapter_04 ~ 05  (0) 2023.09.19
[Java] chapter_01 ~ 03  (0) 2023.09.18