본문 바로가기

Dev. Java

[자바 기본기] 상속

1. 상속(inheritance)

  • 상속이란?
- 기존의 클래스를 재사용해서 새로운 클래스를 작성하는 것.
- 두 클래스를 조상과 자손으로 관계를 맺어주는 것.
- 자손은 조상의 모든 멤버를 상속받는다. ( 생성자 , 초기화블럭 제외)

- 자손의 멤버개수는 조상보다 적을 수 없다. ( 같거나 많다.)


<덧붙임>

  •   상속의 장점
    적은 양의 코드로 새로운 클래스를 작성할 수 있고 코드를 공통적으로 관리할
    수 있기 때문에 코드의 추가 및 변경이 용이함
    
   즉, 코드의 재사용성을 높이고 코드의 중복을 제거하여 프로그램의 생산성과 
   유지보수에 크게 기여함.


2. 클래스간의 관계 

  • 상속관계 (inheritance)


- 공통부분은 조상에서 관리하고 개별부분은 자손에서 관리한다.
- 조상의 변경은 자손에 영향을 미치지만, 자손의 변경은 조상에 아무런 영향을 미치지 않는다.


class Parent {}

        class Child extends Parent {}
        
        class Child2 extends Parent {}

        class GrandChild extends Child {} 




  • 포함관계 (composite)
- 한 클래스의 멤버변수로 다른 클래스를 선언하는것
- 작은 단위의 클래스를 먼저 만들고 , 이 들을 조합해서 하나의 커다란 클래스를 만든다.





3. 클래스간의 관계결정하기 


  • 상속 vs 포함
- 가능한 많은 관계를 맺어주어 재사용성을 높이고 관리하기 쉽게 한다.
          - 'is-a'와 'has-a'를 가지고 문장을 만들어 본다.


원(Circle)은 점(Point)이다. - Circle is a Point.
          원(Circle)은 점(Point)을 가지고 있다. - Circle has a Point.

상속관계 -  '~은 ~이다. (is-a)'
          포함관계 - '~은 ~을 가지고 있다.(has-a)' 





4. 단일 상속 ( single inheritance )
- Java는 단일상속만을 허용한다. (C++ 은 다중상속 허용)
class TVCR extends TV , VCR {} 
이런식의 다중 상속을 허용하지 않는다.

  <덧붙임> 다중상속의 문제점

- 클래스 간의 관계가 매우 복잡해진다.

- 상속받은 멤버 간의 이름이 같을 경우 구별할 수 있는 방법이 없다. 





5. Object 클래스 ( 모든 클래스의 최고조상 )

- 조상이 없는 클래스는 자동적으로 Object 클래스를 상속받게 된다. 
        - 상속계층도의 최상위에는 Object 클래스가 위치한다.
      
        - 모든 클래스는 Object 클래스에 정의된 11개의 메서드를 상속받는다.
           toString() , equals(Object obj) , hashCode(), ...

<덧붙임> 상속 예제





[참조] http://choijava.blogspot.kr/2013/08/java_8678.html?view=sidebar