10-1. 상속

KIHYUK MOON·2023년 1월 13일
0

객체 지향 프로그래밍에서는 부모 클래스의 멤버를 자식 클래스에게 상속해 줄 수 있다. 상속은 이미 개발된 클래스를 재사용해서 새로운 클래스를 만들기 때문에 중복되는 코드를 줄여준다. 그리고 부모 클래스의 수정으로 모든 자식 클래스들도 수저오디는 효과를 가져오기 때문에 유지 보수 시간을 최소화 할 수 있다.

클래스 상속

자식 클래스를 선언할 때 어떤 부모 클래스를 상속받을 것인지 결정하고, 선택된 부모 클래스는 extends 뒤에 기술한다.

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

상속의 특징

  • 여러 개의 부모클래스를 상속할 수 없다. extends 뒤에는 단 하나의 부모 클래스만 와야한다.
  • 부모 클래스에서 private 접근 제한을 갖는 필드와 메소드는 상속 대상에서 제외된다. 그리고 부모 클래스와 자식 클래스가 다른 패키지에 존재한다면 default 접근 제한을 갖는 필드와 메소드도 상속 대상에서 제외된다.

부모 생성자 호출

부모의 생성자를 호출할 때 부모 생성자에 매개변수선언이 있다면 super(); 를 사용한다.

ex)
부모클래스 = public People(String name, String ssn)

자식클래스 = public Student(String name, String ssn)
			super(name, ssn);

super(); 는 부모생성자를 호출하는 역할이다. 자식 생성자의 맨 첫 줄에서 호출된다.

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

상속된 일부 메소드는 자식 클래스에서 다시 수정해서 사용할 수 있다.

오버라이딩 규칙

  • 부모의 메소드와 동일한 리턴 타입, 메소드 이름, 매개 변수 목록을 가져와야 한다.
  • 접근 제한을 더 강하게 재정의할 수 없다. (반대는 가능)
  • 새로운 예외 (Exception)를 throws 할 수 없다.

오버라이딩 이후 부모 메소드 호출

super 키워드를 붙여서 부모 메소드를 호출할 수 있다.

ex)
super.부모메소드();

final 클래스, final 메소드

final 키워드가 붙은 클래스는 최종적인 클래스이므로 상속할 수 없는 클래스가 된다. 마찬가지로 final 키워드가 붙은 메소드는 자식 클래스에서 재정의(오버라이딩)할 수 없다.

protected 접근 제한자

protected 접근 제한자는 같은 패키지 내에서는 default와 같이 접근 제한이 없지만, 다른 패키지에서는 자식 클래스만 접근을 허용한다. 여기서 다른 패키지에 있는 자식 클래스가 생성자를 호출할때는 super()를 이용한다.

profile
개발자 전직중..

0개의 댓글