자바의정석 3판 문제풀이 오답
[7-7] 다음 코드의 실행했을 때 호출되는 생성자의 순서와 실행결과를 적으시오.
class Parent {
int x = 100;
Parent() {
this(200);
}
Parent(int x) {
this.x = x;
}
int getX() {
return x;
}
}
class Child extends Parent {
int x = 3000;
Child() {
this.x = x;
}
Child(int x) {
this(1000);
}
}
class Exercise7_7 {
public static void main(String[] args) {
Child c = new Child();
System.out.println("x=" + c.getX());
}
}
답:
x= 200
해설:
c는 Child의 객체로 매개변수 없는 기본 생성자 Child()를 실행 =>
Child(int x)에 매개변수 1000이 x로 들어감 =>
부모 생성자 실행 =>
부모의 x는 설정되어있지 않음으로 부모 기본생성자 Parent() 실행=>
Parent(int x)에 x가 200으로 들어가서
Parent의 x값은 200=>
getX() 로 200 리턴
[7-18] 다음과 같은 실행결과를 얻도록 코드를 완성하시오.
[Hint] instanceof연산자를 사용해서 형변환한다.
메서드명 : action
기 능 : 주어진 객체의 메서드를 호출한다.
DanceRobot인 경우, dance()를 호출하고,
SingRobot인 경우, sing()을 호출하고,
DrawRobot인 경우, draw()를 호출한다.
반환타입 : 없음
매개변수 : Robot r - Robot인스턴스 또는 Robot의 자손 인스턴스
(⬇️문제+답)
class Exercise7_18 {
/*
(1) action메서드를 작성하시오.
*/
public static void action(Robot r) {
if (r instanceof DanceRobot) {
DanceRobot dr = (DanceRobot) r; //Robot r을 댄스로벗으로 형번환!!
dr.dance();
} else if (r instanceof SingRobot) {
SingRobot sr = (SingRobot) r;
sr.sing();
} else if (r instanceof DrawRobot) {
DrawRobot dr = (DrawRobot) r;
dr.draw();
}
}
public static void main(String[] args) {
Robot[] arr = { new DanceRobot(), new SingRobot(), new DrawRobot()};
for(int i=0; i< arr.length;i++)
action(arr[i]);
} // main
}
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("그림을 그립니다.");
}
}
'Java' 카테고리의 다른 글
Java의 정석 문제풀이 (오답) [8-7][8,9] Java Exit, RuntimeException, 예외처리 (2) | 2023.12.08 |
---|---|
[TIL] 231128 Java 예외처리 (0) | 2023.11.28 |
[TIL] 231029 Java Hashmap, ArrayList, Char/String형 변수 true/false 확인, 오버로딩, 오버라이딩 (0) | 2023.10.29 |
[TIL] 231023 Java Kiosk 프로젝트 제출 (1) | 2023.10.23 |
[TIL] 231019 첫 프로젝트 시작....클래스 이해해보기....클래스의 생김새와 기능(메소드) (0) | 2023.10.19 |