재사용의 방법 - 상속, 포함관계
1)포함 : 필통이라는 클래스에 볼펜 연필 등의 객체를 필요하면 많이 넣고 필요없으면 뺄 수 있는 것
= 내 클래스에 다른 클래스를 포함시켜서 쓰겠다
장점 : 관계가 light => 끊어버리기 쉽다 / 필요한 리소스에 집중
그래서 포함관계가 더 많이 쓰인다.
2)상속 - 객체지향에서 부담스러운 작업
장점 : 큰 노력없이 기능확보가 쉽다
단점 : 잘못 설계하면 물려받는다
리소스가 크다
불필요한 기능 포함
프레임워크 설계자에게는 상속이 필수이지만 일반 프로그래머들은 필요할 때만 쓴다.
has A 포함관계
package ex03.inheritance.hasA08;
/*
경찰이
이미 만들어져있는 총 클래스의 기능을 사용하고 싶을 때
1) is A(is kind of) - 상속
경찰은 총이다(경찰은 총의 한 종류이다)
2) has A - 포함
경찰은 총을 가지고 있다
*/
public class PoliceMain {
public static void main(String[] args) {
NursePolice nurse = new NursePolice();
nurse.wearUniform();
nurse.checkThermometer();
DetectivePolice detective = new DetectivePolice();
detective.shot();
detective.handCuff();
detective.wearUniform();
}
}
내용을 입력하세요.
package ex03.inheritance.hasA08;
public class DetectivePolice extends Police {
private Gun gun = new Gun(); //(필드로) 포함 , 상속이 아님. 필요없으면 빼버리면 됨.
//다른 클래스에 많은 영향을 주지 않음.
//덜 부담스럽다.
void shot() {
gun.shot();
}
void handCuff() {
System.out.println("SNAP!");
}
}
package ex03.inheritance.hasA08;
public class Police {
void wearUniform() {
System.out.println("stylish!");
}
}
package ex03.inheritance.hasA08;
public class NursePolice extends Police {
void checkThermometer() {
System.out.println("36.5");
}
}
package ex03.inheritance.hasA08;
public class Gun {
void shot() {
System.out.println("BBANG!");
}
}
is A 상속 (is kind of)
package ex03.inheritance.iskindof07;
/*
경찰이
이미 만들어져있는 총 클래스의 기능을 사용하고 싶을 때
1) is A(is kind of) - 상속
경찰은 총이다(경찰은 총의 한 종류이다)
2) has A - 포함
경찰은 총을 가지고 있다
*/
public class PoliceMain {
public static void main(String[] args) {
NursePolice nurse = new NursePolice();
nurse.checkThermometer();
nurse.handCuff();
nurse.shot(); //간호사가 총을 쏘면 안됨..
}
}
package ex03.inheritance.iskindof07;
public class Police extends Gun{ //경찰은 총이다 --> 문제가 생길수도!
void handCuff() {
System.out.println("SNAP!");
}
}
package ex03.inheritance.iskindof07;
public class NursePolice extends Police {
void checkThermometer() {
System.out.println("36.5");
}
}
package ex03.inheritance.iskindof07;
public class Gun {
void shot() {
System.out.println("BBANG!");
}
}