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("그림을 그립니다");
}
}
'JAVA 프로그래밍' 카테고리의 다른 글
[JAVA] 풀스택 개발자 부트캠프 012일차 ② final (0) | 2025.01.10 |
---|---|
[JAVA] 풀스택 개발자 부트캠프 012일차 ① 추상 클래스 (0) | 2025.01.10 |
[JAVA] 풀스택 개발자 부트캠프 011일차 ③ 달력(Calendar) (0) | 2025.01.10 |
[JAVA] 풀스택 개발자 부트캠프 011일차 ③ over ride 예시 (0) | 2025.01.10 |
[JAVA] 풀스택 개발자 부트캠프 011일차 ② protected, over ride, super (0) | 2025.01.10 |