JAVA 프로그래밍

[JAVA] 풀스택 개발자 부트캠프 011일차 ④ 상속 예제 3개

selfdailycoding 2025. 1. 10. 11:33

1. 다음과 같은 실행결과를 얻도록 Point3D클래스의 equals()를 멤버변수인 x, y, z 의 값을 비교하도록 오버라이딩하고, 
toString()은 실행결과를 참고해서 적절히 오버라이딩하시오.

 

[실행결과]
[1,2,3]
[1,2,3]
p1==p2 ? false
p1.equals(p2) ? true

 

Point3D p1 = new Point3D(1, 2, 3);
Point3D p2 = new Point3D(1, 2, 3);

System.out.println(p1.toString());
System.out.println(p2.toString());

System.out.println("p1 == p2?"+ (p1 == p2));
System.out.println("p1.equals( p2 )?"+ ( p1.equals( p2 ) ));
class Point3D {

    int x,y,z;

    Point3D() {
        this(0,0,0);
    }
    Point3D(int x, int y, int z) {
        this.x=x;
        this.y=y;
        this.z=z;
    }

    public boolean equals(Object obj) {
        // (1) 인스턴스변수 x, y, z를 비교하도록 오버라이딩하시오.
        Point3D p3d = (Point3D) obj;

        if(this.x == p3d.x && this.y == p3d.y && this.z == p3d.z){
            return true;
        }

        return false;
    }

    @Override
    public String toString() {
        // (2) 인스턴스변수 x, y, z의 내용을 출력하도록 오버라이딩하시오.
        return "Point3D{" +
                "x=" + x +
                ", y=" + y +
                ", z=" + z +
                '}';
    }
}

2. 아래 세 개의 클래스로부터 공통부분을 뽑아서 Unit이라는 클래스를 만들고, Unit클래스를 상속받도록 코드를 변경하시오. 그리고 Unit클래스를 배열로 생성하고 3가지 자식클래스 중에 원하는 객체로 5개를 생성하도록 한다. 

 

class Marine { // 보병
int x, y; // 현재 위치
void move(int x, int y) { /* 지정된 위치로 이동 */ }
void stop() { /* 현재 위치에 정지 */ }
void stimPack() { /* 스팀팩을 사용한다.*/}
}

class Tank { // 탱크
int x, y; // 현재 위치
void move(int x, int y) { /* 지정된 위치로 이동 */ }
void stop() { /* 현재 위치에 정지 */ }
void changeMode() { /* 공격모드를 변환한다. */}
}

class Dropship { // 수송선
int x, y; // 현재 위치
void move(int x, int y) { /* 지정된 위치로 이동 */ }
void stop() { /* 현재 위치에 정지 */ }
void load() { /* 선택된 대상을 태운다.*/ }
void unload() { /* 선택된 대상을 내린다.*/ }
}

 

Unit[] unit = new Unit[5];
unit[0] = new Tank();
unit[1] = new Marine();
unit[2] = new Tank();
unit[3] = new Dropship();
unit[4] = new Marine();

for (Unit u : unit){
    u.move(10, 20);
    u.stop();

    if(u instanceof Marine){
        Marine m = (Marine) u;
        m.stimPack();
    }
    else if(u instanceof Tank){
        Tank t = (Tank) u;
        t.changeMode();
    }
    else if (u instanceof Dropship) {
        ((Dropship)u).load();
        ((Dropship)u).unload();
    }
}
class Unit{
    int x, y; // 현재 위치
    void move(int x, int y) {
        /* 지정된 위치로 이동 */
        System.out.println("x = " + x + " y = " + y);
    }
    void stop() {
        /* 현재 위치에 정지 */
        System.out.println("멈춤!!");
    }
}

class Marine extends Unit{ // 보병
    void stimPack() {
        /* 스팀팩을 사용한다.*/
        System.out.println("캬~~~");
    }
}

class Tank extends Unit{ // 탱크

    void changeMode() {
        /* 공격모드를 변환한다. */
        System.out.println("모드 채인지!");
    }
}

class Dropship extends Unit{ // 수송선

    void load() {
        /* 선택된 대상을 태운다.*/
        System.out.println("야 타!");
    }
    void unload() {
        /* 선택된 대상을 내린다.*/
        System.out.println("야! 내려");
    }
}

3. 다음과 같은 실행결과를 얻도록 코드를 완성하시오.

[실행결과]
춤을 춥니다.
노래를 합니다.
그림을 그립니다.

 

메서드명 : action
기 능 : 주어진 객체의 메서드를 호출한다.
DanceRobot인 경우, dance()를 호출하고,
SingRobot인 경우, sing()을 호출하고,
DrawRobot인 경우, draw()를 호출한다.

반환타입 : 없음
매개변수 : Robot r - Robot인스턴스 또는 Robot의 자손 인스턴스

 

    // 부모             자식                자식             자식
    Robot[] arr = { new DanceRobot(), new SingRobot(), new DrawRobot() };
    /*
        Robot[] arr = new Robot[3];
        arr[0] = new DanceRobot();
        arr[1] = new SingRobot();
        arr[2] = new DrawRobot();
    */
    for(int i=0; i< arr.length;i++){
        action( arr[i] );
    }
}

static void action(Robot robot){
    if(robot instanceof DanceRobot){
        DanceRobot d = (DanceRobot)robot;
        d.dance();
    }
    else if(robot instanceof SingRobot){
        SingRobot s = (SingRobot) robot;
        s.sing();
    }
    else if(robot instanceof DrawRobot){
        ((DrawRobot)robot).draw();
    }
}
class Robot{
}

class DanceRobot extends Robot{
    void dance(){
        System.out.println("춤을 춥니다");
    }
}

class SingRobot extends Robot{
    void sing(){
        System.out.println("노래를 합니다");
    }
}

class DrawRobot extends Robot{
    void draw(){
        System.out.println("그림을 그립니다");
    }
}