ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • JAVA | 상속(Inheritance)
    programming/JAVA 2020. 5. 21. 23:58

     

     

     

    상속(Inheritance) 개념


    자식(클래스)이 상속받고 싶은 부모(클래스)를 선택해서 물려받는다. 즉, 자식 클래스가 어떤 부모 클래스를 상속받을 것인지 결정

    이때 상속 받는 클래스를 자식(하위 / 서브)클래스 라고 하고 상속을 해주는 클래스를 부모(상위 / 슈퍼) 클래스라고 한다. 

     

    자식 클래스가 부모 클래스로부터 상속을 받게 되면 부모 클래스의 필드와 메서드를 물려받게 된다.

    * 부모 클래스에서 private 접근 제한을 갖는 필드와 메소드는 상속 대상에서 제외

    * 부모 클래스와 자식 클래스가 다른 패키지에 존재한다면 default 접근 제한을 갖는 필드와 메소드는 상속 대상에서 제외

     

     

    장점

    • 중복된 코드를 줄일 수 있다.
    • 부모 클래스의 수정으로 모든 자식 클래스들의 수정 효과를 가져오기 때문에 유지 보수 시간을 최소화 시켜준다.
    • 통일성이 있고 다형성을 구현할 수 있다.

     

     

     

    클래스 상속


    현실에서 상속은 부모가 자식을 선택해서 물려주지만, 프로그램은 자식이 부모를 선택한다.

    선택된 부모 클래스는 다음과 같이 extends 뒤에 기술한다.

    class 자식클래스 extends 부모클래스 {
    
     //필드
     
     //생성자
     
     //메소드
    
    }

     

     

     

    부모 생성자 호출


    현실에서 부모 없는 자식이 있을 수 없듯이 자바에서도 자식 객체를 생성하면, 부모 객체가 먼저 생성되고

    자식 객체가 그 다음에 생성된다.

     

    부모 생성자는 자식 생성자의 맨 첫 줄에서 호출된다.

    public 자식생성자() {
     
     super();
    
    }

    첫 줄에 super() 는 부모의 기본 생성자를 호출한다.

    * 컴파일러에 의해 super()가 자동적으로 추가되기 때문에 부모의 기본 생성자가 존재해야 한다.

     

     

     

    메소드의 재정의 (@Override)


    부모 클래스의 모든 메소드가 자식 클래스에 맞게 설계되어 있다면 좋겠지만 어떤 메소드는 자식 클래스가 사용하기에 적합하지 않을 수도 있다. 이 경우 상속된 일부 메소드는 자식 클래스에서 다시 수정해서 사용한다.

    자바는 이런 경우를 위해 오버라이딩(Overriding) 기능을 제공한다.

     

    메소드가 오버라이딩되었다면 부모 객체의 메소드는 숨겨지기 때문에, 자식 객체에서 메소드를 호출하면

    오버라이딩된 자식 메소드가 호출된다.

     

    • 부모의 메소드와 동일한 시그니처(리턴 타입, 메소드 이름, 매개 변수 리스트) 를 가져야 한다.
    • 접근 제한을 더 강하게 오버라이딩 할 수 없다.
    • 새로운 예외(Exception)를 throws 할 수 없다.

    * 만약 자식 클래스 내부에서 오버라이딩된 부모 클래스의 메소드를 호출해야 하는 경우

       - 명시적으로 super 키워드를 붙여서(super.메소드명) 부모 메소드를 호출할 수 있다. 

          super는 부모 객체를 참조하고 있기 때문에 부모 메소드에 직접 접근할 수 있기때문이다.

     

     

     

     

     

    정리


    • 부모 클래스와 자식 클래스는 자바 지정예약어 extends에 의하여 정해진다.
    • 하나의 부모클래스는 여러개의 자식 클래스를 가질 수 있다.
    • 하나의 클래스는 여러개의 클래스로부터 상속을 받을 수 없다. ( 여러 개의 부모 클래스를 상속할 수 없다. extends 뒤에는 단 하나의 부모 클래스만 와야함) = 단일 상속만 가능
    • 자식 클래스는 또 다른 클래스의 부모 클래스가 될 수 있다.
    • 자식 클래스는 부모 클래스로 부터 물려받은 자원을 override 하여 수정해서 사용 할 수 있다.
    • 부모 클래스가 상속받은 자원도 자식클래스가 사용 가능하다.

     

     

     

     


    참고  :  이것이 자바다 ,
             https://commin.tistory.com/101

     

Designed by Tistory.