프로그래밍

[자바 응용 문제] 다형성과 타입 변환 본문

자바/자바 예제 풀이

[자바 응용 문제] 다형성과 타입 변환

시케 2023. 5. 20. 23:30
728x90
반응형

다형성과 타입 변환

교재: 멘토씨리즈 JAVA

300p ~ 301p

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 SchoolBus();
		Bus b1 = new Bus();
		SchoolBus sb = new Car();
		
		Car c2 = new OpenCar();
		OpenCar oc = new SportsCar();
		Bus b3 = new OpenCar();
		Bus b4 = new SportsCar();
	}
}

답안코드

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 SchoolBus();
		Bus b1 = new Bus();
		SchoolBus sb = new SchoolBus();
		
		Car c2 = new OpenCar();
		OpenCar oc = new SportsCar();
		Bus b3 = new SchoolBus();
		Bus b4 = new Bus();
	}
}

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();
	}
}
// 실행 결과
빨간 스피커가 커졌습니다.
파란 스피커가 커졌습니다.

답안 코드

package section11;

class Person {
	Speaker speaker;

	Person(Speaker speaker) {
		this.speaker = speaker;
	}

	void turnOn() {
		System.out.println(speaker.getName() + "가 켜졌습니다.");
	}
}

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 {

	BlueSpeaker() {
		super("파란 스피커");
	}
}

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();
	}

}

 

728x90
반응형
Comments