Notice
Recent Posts
Recent Comments
Link
passion and relax
[JAVA] 07. 객체마을에서의 더 나은 삶 (미래를 준비합시다) 본문
상속으로 해야하는지, 변수로 해야 하는지
A는 B다, B는 A다가 성립 된다면, (고양이는 동물이다)
A는 B다 : B extends A
B는 A다 : A extends B
A는 B다, B는 A다가 성립이 안된다면, (화장실에는 욕조가 있다)
A에는 B가 있다 : A의 인스턴스 변수로 B를 선언
B에는 A가 있다 : B의 인스턴스 변수로 A를 선언
상속의 장점
쉽게 확장할 수 있다. (적절한 디자인패턴이 동반된다면, 유지보수가 쉽고 기다려 진다)
코드 중복 방지
일련의 클래스를 위한 공통적인 규약을 정의 (abstract)
다형성을 이용하여 상위 객체에 하위 객체 담기
Animal[] animals = new Animal[5];
animals[0] = new Dog();
animals[1] = new Cat();
for (int i=0; i<animals.length; i++) {
animals[i].eat();
}
//인자와 리턴 유형에 다형성 활용
class Vet {
public void giveShot(Animal a) {
a.makeNoise();
}
}
Vet v = new Vet();
Dog d = new Dog();
Hippo h = new Hippo();
v.giveShot(d); //Dog의 makeNoise() 실행
v.giveShot(h); //Hippo의 makeNoise() 실행
기존 클래스의 확장
public으로 만들지 않았다면 상속이 불가능하다. (ex. inner class)
final 로 만들었다면 상속이 불가능하다. (ex. String)
생성자가 모두 private 이라면 상속이 불가능하다.
소스는 없어도, 상속 받아서 추가하거나 메소드명을 안다면 오버라이드 할 수 있다.
'프로그래밍' 카테고리의 다른 글
[JAVA] 09. 객체의 삶과 죽음 (생성자와 메모리 관리) (0) | 2024.05.23 |
---|---|
[JAVA] 08. 심각한 다형성 (추상 클래스와 인터페이스) (1) | 2024.05.21 |
[JAVA] 06. 자바 라이브러리 (전부 다 직접 만들어서 쓸 필요는 없습니다) (1) | 2024.05.20 |
[JAVA] 05. 메소드를 더 강력하게 (흐름 제어, 연산 등) (0) | 2024.05.20 |
[JAVA] 04. 객체의 행동 (객체의 상태가 메소드의 속성에 미치는 영향) (0) | 2024.05.20 |