JAVA/JAVA 멘토시리즈

[JAVA 멘토시리즈] 응용 문제 풀이 (다형성과 타입 변환)

웹코린이 2023. 5. 29. 14:40
728x90

1. 다음 코드는 컴파일 에러가 발생합니다. 컴파일 에러가 발생하는 곳을 모두 찾아 수정해 보세요.

package section11;

class Car{ }
class Bus extends Car { }
class SchoolBus extends Bus { }

class OpenCar extends Car { }
class SportsCar extends OpenCar { }

public class PRACTICE_11_01 {
	public static void main(String[] args) {
    	Car c1 = new Car();
        Bus b1 = new Bus();
        SchoolBus sb = new Car();
        
        Car c2 = new OpenCar();
        OpenCar oc = new SportsCar();
        Bus b3 = new OpenCar();
        Bus b4 = new SportsCar();
    }
}

 

더보기

총 4개  발생

SchoolBus sb = new Car();  // 자식은 부모의 집이 될 수 없음.

OpenCar oc = new SportsCar(); // 자식은 부모의 집이 될 수 없음.

Bus b3 = new OpenCar(); // 서로 상속 관계가 아님.

Bus b4 = new SportsCar(); // 서로 상속 관계가 아님.

 

2. 다음 설명에 해당하는 용어는 무엇입니까 ?

  • 부모 클래스에게 상속받은 메서드를 재정의하여 자식 클래스용 메서드를 구현하고 자식 객체를 통해 메서드를 호출할 때는 부모의 메서드가 아니라 자식의 메서드가 호출된다.
  1.  오버라이딩
  2. 오버로딩
  3. 오버플로우

 

더보기

1. 오버라이딩

상속 관계에서 메소드를 재정의 하는 것은 오버라이딩이다.

 

3. 다음과 같은 결과가 나오도록 아래 클래스를 구현해 주세요.

  • class Speaker
  • class RedSpeaker
  • class BlueSpeaker
package section11;

class Person {
	Speaker speaker;
    
    Person(Speaker speaker) {
    	this.speaker = speaker;
    }
    
    void turnOn() {
    	System.out.println(speaker.getName() + "이 켜졌습니다.");
    }
}

public class PRACTICE_11_03 {
	public static void main(String[] args) {
    	Speaker s1 = new RedSpeaker();
        Person p1 = new Person(s1);
        p1.turnOn();
        
        Speaker s2 = new BlueSpeaker();
        Person p2 = new Person(s2);
        p2.turnOn();
    }
} 

// 출력 결과
// 빨간 스피커가 커졌습니다.
// 파란 스피커가 켜졌습니다.

 

더보기

class Speaker {
    private String name;

    Speaker(String name) {
    this.name = name;
    }

    public String getName() {
        return name;
    }

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

class RedSpeaker extends Speaker {
    RedSpeaker() {
        super("빨간 스피커");
    }
}

class BlueSpeaker extends Speaker {
    public BlueSpeaker() {
        super("파란 스피커");
    }
}

728x90