상속(Java)


http://www.yes24.com/Product/Goods/103389317

 

Do it! 자바 완전 정복 - YES24

이 책은 ‘이제 막 프로그래밍에 입문한 사람’에게 꼭 필요한 기본기부터 ‘찐개발자’라면 꼭 알아야 할 내용까지 국내 집필서 중 가장 많은 도해와 그림을 이용해 설명한다. 특히 프로그래

www.yes24.com

Do it! 자바 완전 정복 책을 공부하며 요약・정리한 내용입니다.


 

상속

부모 클래스의 필드, 이너클래스, 메서드를 자식 클래스 내부에 포함시킴

 

부모클래스 ← 자식클래스

class 자식클래스 extends 부모클래스 {
		...
}

부모 클래스는 자식 클래스의 공통적 특징을 모아 구성한 클래스 이다.

자식클래스는 부모 클래스의 모든 멤버(필드, 이너클래스, 메서드)를 내려받고 자식클래스에서 추가 필드와 메서드를 구성하면 된다.

부모 클래스에서 자식클래스로 갈수록 더 많은 특징과 기능이 구체화 되므로 범위가 좁아진다.

클래스는 다중 상속(부모 클래스가 2개 이상)이 불가능하다.

 

참고로 UML로 상속을 표시할때는 화살표가 부모 클래스 쪽으로 향함

e.g. 부모클래스 ← 자식클래스

 

상속의 장점

  1. 코드의 중복성 제거
  2. 다형적 표현 가능
  • 1개의 객체를 여러 가지 모양으로 표현할 수 있다.
Animal a1 = new Dog();
Animal a2 = new Dragon();
Animal a3 = new Bear();

 

다중 상속을 허용하지 않는 이유

만일 다중 상속을 허용하면 모호성(ambiguous)이 발생한다.

e.g.


class A에 data는 3이고

class B의 data가 4일때

만약 class C extends A, B 이렇다면 C의 data의 값에는 모호성이 발생한다.


자식클래스가 많은 것은 다중 상속이 아니다.

 

생성자의 상속 여부

생성자는 자식 클래스로 상속되지 않는다.

e.g.

class A {
	A() {}
}

class B extends A {
	A() {} // X
}

클래스 내부에는 필드, 메서드, 생성자, 이너 클래스만 올 수 있다.

그래서 예시의 B클래스의 A(){} 는 B클래스와 이름이 달라 생성자도 아니고 리턴타입도 없어 메서드도 아니다.

즉 오류가 발생한다.