다음 요구사항에 맞게 클래스 구조 구현 및 객체 생성 후 기능 실행해보세요
요구사항
- Galaxy22s
- 전화번호 설정 가능
- 색상 설정 가능
- 전화(call) 기능을 실행하면 "갤럭시22s 전화 기능 실행" 출력
- 문자(sms) 기능을 실행하면 "갤럭시22s 문자 기능 실행" 출력
- 삼성페이(samsungPay) 기능을 실행하면 "갤럭시22s 삼성페이 기능 실행" 출력
- 빅스비(bixby) 기능을 실행하면 "갤럭시22s 음성인식 기능 실행" 출력
- GalaxyFold3
- 전화번호 설정 가능
- 색상 설정 가능
- 전화(call) 기능을 실행하면 "갤럭시폴드3 전화 기능 실행" 출력
- 문자(sms) 기능을 실행하면 "갤럭시폴드3 문자 기능 실행" 출력
- 삼성페이(samsungPay) 기능을 실행하면 "갤럭시폴드3 삼성페이 기능 실행" 출력
- 홍채인식(iris) 기능을 실행하면 "갤럭시폴드3 홍채인식 기능 실행" 출력
- IPhone12
- 전화번호 설정 가능
- 색상 설정 가능
- 전화(call) 기능을 실행하면 "IPhone12 전화 기능 실행" 출력
- 문자(sms) 기능을 실행하면 "IPhone12 문자 기능 실행" 출력
- 아이튠즈(itunes) 기능을 실행하면 "IPhone12 아이튠즈 기능 실행" 출력
- 시리(siri) 기능을 실행하면 "IPhone12 음성인식 기능 실행" 출력
- IPhone13
- 전화번호 설정 가능
- 색상 설정 가능
- 전화(call) 기능을 실행하면 "IPhone13 전화 기능 실행" 출력
- 문자(sms) 기능을 실행하면 "IPhone13 문자 기능 실행" 출력
- 페이스타임(faceTime) 기능을 실행하면 "IPhone13 영상통화 기능 실행" 출력
- 시리(siri) 기능을 실행하면 "IPhone13 음성인식 기능 실행" 출력
** 분석
1) 모든 하위 클래스는 멤버 필드인 전화번호(telNum), 색상(color)와 메소드인 전화(call()), 문자(sms())를 가지고 있다
2) Galaxy22s 클래스와 GalaxyFold3 클래스는 공통적으로 삼성페이(samsungPay())를 가지고 있다
3) IPhone12 클래스와 IPhone13 클래스는 공통적으로 시리(siri())를 가지고 있다
4) Galaxy22s 클래스는 빅스비(bixby()),
GalaxyFold3 클래스는 홍채인식(iris()),
IPhone12 클래스는 아이튠즈(itunes()),
IPhone13 클래스는 페이스타임(faceTime())을 가지고 있다
5) 문제가 되는 점은 기능 메소드 출력시 나오는 메세지에 기종명이 다 다르다는 것이다 (추상 메소드가 필요한 이유)
Phone 클래스 (슈퍼 클래스 + 추상 클래스)
package day12_oop.inherit6;
// 추상 클래스(이면서 슈퍼클래스)
public abstract class Phone {
// 멤버 필드
protected String telNum;
protected String color;
// getter & setter
public String getTelNum() {
return this.telNum;
}
public void setTelNum(String telNum) {
this.telNum = telNum;
}
public String getColor() {
return this.color;
}
public void setColor(String color) {
this.color = color;
}
// 생성자 - 색상(color)는 반드시 입력하도록
public Phone(String color) {
this.setColor(color);
}
// 추상 메소드
public abstract void call(); // 전화에 대한
public abstract void sms(); // sms에 대한
}
- 추상 메소드를 정의만 해놓고 가장 하위 클래스에서 메소드 오버라이딩을 하여 메소드를 재정의한다
Android 클래스 (추상 클래스)
package day12_oop.inherit6;
// 추상 클래스
public abstract class Android extends Phone {
// 멤버 필드
// 생성자 - 최소한 슈퍼 클래스의 생성자 규칙(색상 반드시 입력)을 준수해야 한다
public Android(String color) {
super(color);
}
// 추상 메소드 - 삼성페이에 대한
public abstract void samsungPay();
}
IOS 클래스 (추상 클래스)
package day12_oop.inherit6;
// 추상 클래스
public abstract class IOS extends Phone {
// 멤버 필드
// 생성자 - 최소한 슈퍼 클래스의 생성자 규칙(색상 반드시 입력)을 준수해야 한다
public IOS(String color) {
super(color);
}
// 추상 메소드 - 시리에 대한
public abstract void siri();
}
Galaxy22s 클래스
package day12_oop.inherit6;
// 하위 클래스
public class Galaxy22s extends Android {
// 멤버 필드
// 생성자
public Galaxy22s(String color) {
super(color);
}
// 메소드
public void bixby() {
System.out.println("Galaxy22s 빅스비 실행");
}
// 추상메소드 오버라이딩
@Override
public void samsungPay() {
System.out.println("Galaxy22s 삼성페이 실행");
}
@Override
public void call() {
System.out.println("Galaxy22s 전화 실행");
}
@Override
public void sms() {
System.out.println("Galaxy22s 문자 실행");
}
}
GalaxyFold3 클래스
package day12_oop.inherit6;
// 하위 클래스
public class GalaxyFold3 extends Android {
// 멤버 필드
// 생성자
public GalaxyFold3(String color) {
super(color);
}
// 메소드
public void iris() {
System.out.println("GalaxyFold3 홍채인식 실행");
}
// 추상메소드 오버라이딩
@Override
public void samsungPay() {
System.out.println("GalaxyFold3 삼성페이 실행");
}
@Override
public void call() {
System.out.println("GalaxyFold3 통화 실행");
}
@Override
public void sms() {
System.out.println("GalaxyFold3 문자 실행");
}
}
IPhone12 클래스
package day12_oop.inherit6;
// 하위 클래스
public class IPhone12 extends IOS {
// 멤버 필드
// 생성자
public IPhone12(String color) {
super(color);
}
// 메소드
public void itunes() {
System.out.println("IPhone12 아이튠즈 실행");
}
// 추상메소드 오버라이딩
@Override
public void siri() {
System.out.println("IPhone12 시리 실행");
}
@Override
public void call() {
System.out.println("IPhone12 전화 실행");
}
@Override
public void sms() {
System.out.println("IPhone12 문자 실행");
}
}
IPhone13 클래스
package day12_oop.inherit6;
// 하위 클래스
public class IPhone13 extends IOS {
// 멤버 필드
// 생성자
public IPhone13(String color) {
super(color);
}
// 메소드
public void faceTime() {
System.out.println("IPhone13 영상통화 실행");
}
// 추상메소드 오버라이딩
@Override
public void siri() {
System.out.println("IPhone13 시리 실행");
}
@Override
public void call() {
System.out.println("IPhone13 통화 실행");
}
@Override
public void sms() {
System.out.println("IPhone13 문자 실행");
}
}
메인 메소드
package day12_oop.inherit6;
public class Test01 {
public static void main(String[] args) {
// 객체 생성
Galaxy22s a = new Galaxy22s("블랙");
GalaxyFold3 b = new GalaxyFold3("그린");
IPhone12 c = new IPhone12("퍼시픽블루");
IPhone13 d = new IPhone13("시에라블루");
// 출력
a.call();
a.sms();
a.samsungPay();
a.bixby();
b.call();
b.sms();
b.samsungPay();
b.iris();
c.call();
c.sms();
c.itunes();
c.siri();
d.call();
d.sms();
d.faceTime();
d.siri();
}
}
'국비교육 > 국비교육 복습' 카테고리의 다른 글
day13_oop.poly2 : 다형성(polymorphism) + 업 캐스팅(up casting) (★) (0) | 2022.08.14 |
---|---|
day12_oop.inherit8 : 추상 클래스(abstract class)와 추상 메소드(abstract method) (0) | 2022.08.14 |
day12_oop.inherit5 : 상속받은 클래스로부터 다시 상속을 받는 경우 + 접근제한 protected (★) (0) | 2022.08.14 |
day12_oop.inherit3 : 슈퍼 클래스로부터의 상속 + 접근제한 protected (★) (0) | 2022.08.14 |
day11_oop.keyword10 : final 키워드 - 오직 1번만 변수의 초기화를 허용 (0) | 2022.08.13 |