챕터 10 : 클래스와 객체 7
문제
// 상황 : DVD방에 3개의 서로다른 tv가 있다. 영업을 하다보니 각 tv의 특별한 기능은 거의 사용될 일이 없고 기본적인 켜기/끄기 만 사용된다. 현재 리모콘이 3개나 있는습니다.
// 문제 : 알바를 편하게 하기 위해서 표준Tv 리모콘을 구현해주세요.
class Main {
public static void main(String[] args) {
System.out.println("== 표준Tv 리모콘 들여오기 전 ==");
샤오미Tv a샤오미Tv = new 샤오미Tv();
삼성Tv a삼성Tv = new 삼성Tv();
LGTv aLGTv = new LGTv();
a샤오미Tv.켜기();
// 출력 => 샤오미Tv 켜집니다.
a샤오미Tv.끄기();
// 출력 => 샤오미Tv 꺼집니다.
a샤오미Tv.vr켜기();
// 출력 => 샤오미Tv vr켜기!
a삼성Tv.켜기();
// 출력 => 삼성Tv 켜집니다.
a삼성Tv.끄기();
// 출력 => 삼성Tv 꺼집니다.
a삼성Tv.ar켜기();
// 출력 => 삼성Tv ar켜기!
aLGTv.켜기();
// 출력 => LGTv 켜집니다.
aLGTv.끄기();
// 출력 => LGTv 꺼집니다.
aLGTv.게임모드전환();
// 출력 => LGTv 게임모드전환!
System.out.println("== 표준Tv 리모콘 들여온 후 ==");
// 표준Tv 리모콘을 저장할 수 있는 변수를 만든다.
표준Tv a표준Tv;
// a표준Tv 변수에 샤오미Tv 객체를 연결한다.
// 중요 : 다른말로 a샤오미Tv 변수안에 있던 샤오미Tv 리코몬을 표준Tv 리모콘화 해서 a표준Tv변수에 넣는다.
a표준Tv = a샤오미Tv;
a표준Tv.켜기();
// 출력 : 샤오기TV 켜집니다.
a표준Tv.끄기();
// 출력 : 샤오기TV 꺼집니다.
// a표준Tv 변수에 삼성Tv 객체를 연결한다.
a표준Tv = a삼성Tv;
a표준Tv.켜기();
// 출력 : 삼성TV 켜집니다.
a표준Tv.끄기();
// 출력 : 삼성TV 꺼집니다.
// a표준Tv 변수에 LGTv 객체를 연결한다.
a표준Tv = aLGTv;
a표준Tv.켜기();
// 출력 : LGTV 켜집니다.
a표준Tv.끄기();
// 출력 : LGTV 꺼집니다.
// LGTV만의 고유 기능을 표준Tv 리모콘을 이용해서 호출하기 => 불가능
// (LGTv) => a표준Tv 변수에 있던 표준Tv 리모콘이 LGTv리모콘화 해서 `aLGTv2` 변수에 들어간다.
LGTv aLGTv2 = (LGTv)a표준Tv;
aLGTv2.게임모드전환();
}
}
// 이 클래스는 오직 리모콘을 만들기 위해서 만들어졌습니다.
class 표준Tv {
void 켜기() { }
void 끄기() { }
}
class 샤오미Tv extends 표준Tv {
void 켜기() {
System.out.println("샤오미Tv 켜집니다.");
}
void 끄기() {
System.out.println("샤오미Tv 꺼집니다.");
}
void vr켜기() {
System.out.println("샤오미Tv vr켜기!");
}
}
class 삼성Tv extends 표준Tv {
void 켜기() {
System.out.println("삼성Tv 켜집니다.");
}
void 끄기() {
System.out.println("삼성Tv 꺼집니다.");
}
void ar켜기() {
System.out.println("삼성Tv ar켜기!");
}
}
class LGTv extends 표준Tv {
void 켜기() {
System.out.println("LGTv 켜집니다.");
}
void 끄기() {
System.out.println("LGTv 꺼집니다.");
}
void 게임모드전환() {
System.out.println("LGTv 게임모드전환!");
}
}
Java
복사
챕터 11 : 클래스와 객체 8
문제
// 문제 : 아래가 실행되도록 해주세요.
class Main {
public static void main(String[] args) {
사람 a사람 = new 사람();
a사람.나이 = 20;
a사람.a왼팔 = new 팔();
}
}
class 사람 {
// 클래스안에 변수를 정의 할 수 있다.
int 나이;
팔 a왼팔;
}
class 팔 {
}
Java
복사
// 문제 : 아래가 실행되도록 해주세요.
class Main {
public static void main(String[] args) {
전사 a전사 = new 전사();
a전사.나이 = 20;
a전사.a무기 = new 활();
a전사.a무기 = new 칼();
}
}
class 전사 {
int 나이;
무기 a무기;
}
interface 무기 {
}
class 활 implements 무기 {
}
class 활 implements 칼 {
}
Java
복사
// 문제 : 아래가 실행되도록 해주세요.
class Main {
public static void main(String[] args) {
전사 a전사 = new 전사();
String 이름 = "칸";
a전사.이름 = 이름;
a전사.나이 = 20;
a전사.자기소개();
a전사.나이++;
a전사.자기소개();
a전사.나이 = 30;
a전사.이름 = "카니";
a전사.자기소개();
a전사.a무기 = new 활();
a전사.공격();
// 출력 : 카니가 활로 공격합니다.
a전사.a무기 = new 칼();
a전사.공격();
// 출력 : 카니가 칼로 공격합니다.
}
}
class 전사 {
// 인스턴스 변수
String 이름;
// 인스턴스 변수
int 나이;
// 인스턴스 변수
무기 a무기;
void 자기소개() {
System.out.println("안녕하세요. 저는 " + this.나이 + "살 " + this.이름 + " 입니다.");
}
void 공격() {
this.a무기.사용(this.이름);
}
}
class 무기 {
void 사용(String 사용자_이름) {}
}
class 칼 extends 무기 {
void 사용(String 사용자_이름) {
System.out.println(사용자_이름 + "가 칼로 공격합니다.");
}
}
class 활 extends 무기 {
void 사용(String 사용자_이름) {
System.out.println(사용자_이름 + "가 활로 공격합니다.");
}
}
Java
복사