혼자공부하는자바 상속

  • 상속을 이용하면 부모 클래스의 수정으로 모든 자식 클래스들도 수정되는 효과를 가져오기 때문에 유지 보수 시간을 최소화 가능

 

클래스 상속

  • 프로그램에서는 자식이 부모를 선택
class 자식 클래스 extends 부모클래스 {

//필드

//생성자

//메소드

}

 

  • 단 하나의 부모 클래스만 상속 가능
  • 부모 클래스에서 private 접근 제한 필드와 메소드는 상속 대상 x
  • 다른 패키지라면 default 접근 제한 필드와 메소드는 상속 대상 x

 

부모 생성자 호출

  • 모든 객체는 클래스의 생성자를 호출해야만 생성
  • 부모 생성자는 자식 생ㅎ성자의 맨 첫출에서 호출됨
  • super()는 부모의 기본 생성자를 호출함 ->컴파일러가 자동 생성

 

메소드 재정의 (오버라이딩 overriding)

  • 부모의 메소드와 동일한 시그니처 (리턴타입, 메소드 이름, 매개 변수 목록)을 가저야 함
  • 접근 제한을 더 강하게 재정의할 수 없음
  • 새로운 예외를 throws할 수 없음
  • @Override 어노테이션을 붙여주면 컴파일러가 확인도 해줌 -> 안붙여도 상관 x but 추천

 

부모 메소드 호출

  • super.부모메소드()
  • 자식 클래스 내부에서 재정의된 부모 클래스의 메소드를 호출할 때 사용

 

final 클래스와 final 메소드

  • 상속할 수  없는 final 클래스
  • final 클래스는 부모 클래스가 될 수 없음
  • 재정의할 수 없는 final 메소드
  • final 메소드는 자식 클래스에서 재정의 할 수 없음

 

확인문제

  • 자바는 다중 상속을 허용한다. (x)
  • 부모의 메소드를 자식 클래스의 재정의(오버라이딩)할 수 있다. (o)
  • 부모의 private 접근 제한을 갖는 필드와 메소드는 상속의 대상이 아니다 (o)
  • protected 멤버는 같은 패키지의 모든 클래스와 다른 패키지의 자식클래스만 접근할 수 있다 (o)
  • 부모의 메소드는 숨김 효과가 나타난다 (o)
  • 재정의 시 접근 제한을 더 강하게 할 수 있다 (x)
  • @Override를 붙이면 컴파일러가 재정의를 확인한다 (o)
  • 부모 메소드를 호출하고 싶다면 super 키워드를 사용할 수 있다 (o)

 

final 클래스, final 필드, final 메소드에 관한 설명 o,x 

  • 모두 상속과 관련이 있다 (x) -> 필드는 상속과 관련이 없음
  • final 메소드를 가진 클래스는 부모 클래스가 될 수 없다 (x) -> 재정의 할 수 없다
  • final 메소드는 재정의 할 수 없다 (o)
  • final 클래스는 final 필드가 반드시 있어야 한다 (x)

 

 

+ Recent posts