Java
[TIL] 231120 Java의 정석 연습문제 7장 오답
studymode
2023. 11. 20. 17:49
자바의정석 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("그림을 그립니다.");
}
}