
📅2023. 12. 15 7일차
코드 재사용
클래스들간의 관계 성립
- 문법 --> class 자식클래스이름 extends 부모클래스이름
- 부모클래스는 자식 클래스에 포함된다.
따라서 부모 클래스에 새로운 필드를 하나 추가하면, 자식 클래스에도 자동으로 해당 필드가 추가된 것처럼 동작한다.
- 오버라이딩: 메소드를 덮어씌우는 과정
- 오버로딩: 같은 메소드를 사용하는데 각각의 다른 매개변수를 사용해서 두 개의 다른 메소드처럼 처리하는 것
interface Parents {
void a();
void b();
}
interface Parents2 {
void a();
void b();
}
abstract class Child implements Parents,Parents2 {
public void a() {
System.out.println("a");
}
public void b() {
System.out.println("a");
}
}
- 요구사항에 맞게 오리게임을 만들어보시오.
/* 요구사항
- D1 요구 : 오리를 생성하고 날게하시오.
- D1 완료 : 클래스와 메서드를 만들어서 처리
- D2 요구 : 게임의 디테일을 살리기 위해서 `청둥오리`와 `흰오리`를 생성하고 날게하시오.
- D2 완료 : 클래스와 메서드를 만들어서 처리
- D3 요구 : 오리 계열의 클래스에 날다 메서드가 중복되었습니다. 중복을 제거해주세요.
- D3 완료 : 상속을 사용해서 처리
- D4 요구 : 게임의 재미를 위하여 고무오리를 추가하고 날게 하시오.
- D4 완료 : 클래스와 메서드를 만들어서 처리
- D5 요구 : 주말 주주회의에서 고무오리가 하늘을 날아다니는 것에 대해서 태클이 들어왔습니다. 고무오리 계열은 하늘을 날 수 없게 해주세요.
- D5 완료 : 메서드 오버라이드를 사용해서 처리
- D6 요구 : 고무오리가 반응이 좋습니다. 고무2오리를 추가하고 날게 해주세요.
- D6 완료 : 고무오리가 반응이 좋습니다. 고무2오리를 추가하고 날게 해주세요.
- D7 요구 : 고무오리계열에서 날다 메서드의 중복을 제거해주세요.
- D7 완료 : 상속으로 해결
- D8 요구 : 자바에서 다중상속은 불가능 합니다. 상속에는 한계가 있습니다. 복잡한 상속을 사용하지 않고 고무오리계열의 중복을 제거해주세요.
- 복잡한 상속을 사용하지 않는다는 것의 의미 : 모든 오리 계열 클래스들은 부모클래스가 오리 클래서 여야 한다.
*/
class Main {
public static void main(String[] args) {
MallardDuck m = new MallardDuck();
m.fly();
// 출력 : 오리가 날개로 날아갑니다.
WhiteDuck w = new WhiteDuck();
w.fly();
// 출력 : 오리가 날개로 날아갑니다.
RubberDuck r = new RubberDuck();
r.fly();
// 출력 : 저는 날 수 없어요. ㅠㅠ
RubberDuckNum2 r2 = new RubberDuckNum2();
r2.fly();
}
}
class Duck {
void fly() {
System.out.println("오리가 날개로 날아갑니다.");
}
}
class MallardDuck extends Duck {
}
class WhiteDuck extends Duck {
}
class RubberDuck extends Duck {
// 메서드 재정의 라고 합니다.
// 메서드 오버라이드 라고도 합니다.
// 메서드 재정의 => 부모가 물려준 능력을 다시 구현한다.
void fly() {
System.out.println("저는 날 수 없어요. ㅜㅠ");
}
}
class RubberDuckNum2 extends Duck {
void fly() {
System.out.println("저는 날 수 없어요. ㅜㅠ");
}
}
- 인력관리사무소 관리하기 (아래가 실행되도록 해주세요, 배열사용금지)
class Main {
public static void main(String[] args) {
사람인력관리소 a사람인력관리소 = new 사람인력관리소();
a사람인력관리소.add사람("홍길순", 33);
// 나이가 33살인 1번째 사람(홍길순)이 추가되었습니다.
a사람인력관리소.add사람("홍길동", 20);
// 나이가 20살인 2번째 사람(홍길동)이 추가되었습니다.
a사람인력관리소.add사람("임꺽정", 30);
// 나이가 30살인 3번째 사람(임꺽정)이 추가되었습니다.
사람 a사람1 = a사람인력관리소.get사람(1);
a사람1.자기소개();
// 저는 1번, 홍길순, 33살 입니다.
사람 a사람2 = a사람인력관리소.get사람(2);
a사람2.자기소개();
// 저는 2번, 홍길동, 20살 입니다.
사람 a사람3 = a사람인력관리소.get사람(3);
a사람3.자기소개();
// 저는 3번, 임꺽정, 30살 입니다.
}
}
class 사람인력관리소 extends 사람 {
int num;
사람 첫번째사람;
사람 두번째사람;
사람 세번째사람;
void add사람(String name, int age) {
사람 a사람 = new 사람();
a사람.age = age;
a사람.name = name;
a사람.n = num + 1;
System.out.printf("나이가 %d살인 %d번째 사람(%s)이 추가되었습니다.\n", a사람.age, a사람.n, a사람.name);
if (a사람.n == 1) {
첫번째사람 = a사람;
} else if (a사람.n == 2) {
두번째사람 = a사람;
} else if (a사람.n == 3) {
세번째사람 = a사람;
}
this.num = a사람.n;
}
사람 get사람(int n) {
사람 가져온사람 = new 사람();
if (첫번째사람.n == n) {
가져온사람 = 첫번째사람;
} else if (두번째사람.n == n) {
가져온사람 = 두번째사람;
} else if (세번째사람.n == n) {
가져온사람 = 세번째사람;
}
return 가져온사람;
}
}
class 사람 {
int n;
String name;
int age;
void 자기소개() {
System.out.printf("저는 %d번, %s, %d살 입니다.\n", n, name, age);
}
}
- 인력관리사무소 관리하기 (배열 ver.)
class Main {
public static void main(String[] args) {
사람인력관리소 a사람인력관리소 = new 사람인력관리소();
a사람인력관리소.add사람("홍길순", 33);
// 나이가 33살인 1번째 사람(홍길순)이 추가되었습니다.
a사람인력관리소.add사람("홍길동", 20);
// 나이가 20살인 2번째 사람(홍길동)이 추가되었습니다.
a사람인력관리소.add사람("임꺽정", 30);
// 나이가 30살인 3번째 사람(임꺽정)이 추가되었습니다.
사람 a사람1 = a사람인력관리소.get사람(1);
a사람1.자기소개();
// 저는 1번, 홍길순, 33살 입니다.
사람 a사람2 = a사람인력관리소.get사람(2);
a사람2.자기소개();
// 저는 2번, 홍길동, 20살 입니다.
사람 a사람3 = a사람인력관리소.get사람(3);
a사람3.자기소개();
// 저는 3번, 임꺽정, 30살 입니다.
}
}
class 사람인력관리소 extends 사람 {
int num = 0;
사람[] 사람들 = new 사람[100];
void add사람(String name, int age) {
int 번호 = num + 1;
사람 a사람 = new 사람();
a사람.age = age;
a사람.name = name;
a사람.n = 번호;
사람들[번호 - 1] = a사람;
System.out.printf("나이가 %d살인 %d번째 사람(%s)이 추가되었습니다.\n", a사람.age, a사람.n, a사람.name);
this.num = a사람.n;
}
사람 get사람(int n) {
return 사람들[n - 1];
}
}
class 사람 {
int n;
String name;
int age;
void 자기소개() {
System.out.printf("저는 %d번, %s, %d살 입니다.\n", n, name, age);
}
}
- 했던 내용 전부 복습
- 인력관리소 문제 이해
- 코드업 최대한 많이
- WIKI 정리
오리문제는 그나마 낫 뱃 했다. but 인력관리소 문제는 어렵다...어려워.. 먼가 복잡하다 다시 try 해보자!