[JAVA]상속

혜원·2023년 8월 11일

JAVA

목록 보기
2/3

상속:

상속은 현실에서 부모가 자식에게 물려주는 행위를 말한다. 객체 지향 프로그래밍에서도 부모 클래스의 멤버를 자식 클래스에게 물려줄 수 있다. 프로그램에서는 부모 클래스를 상위 클래스라고 부르고, 자식 클래스를 하위 클래스 또는 파생 클래스라고 부른다.
상속을 이용하면 부모 클래스의 수정으로 모든 자식 클래스들도 수정되는 효과를 가져오기 때문에 유지 보수 시간을 최소화할 수 있다.



자바에서 상속은 다음과 같은 특징을 갖는다.
1. 여러 개의 부모 클래스를 상속할 수 없다. 그러므로 다음과 같이 extends 뒤에는 단 하나의 부모 클래스만 와야 한다.

2. 부모 클래스에서 private 접근 제한을 갖는 필드와 메소드는 상속 대상에서 제외된다. 그리고 부모 클래스와 자식 클래스가 다른 패키지에 존재한다면 default 접근 제한을 갖는 필드와 메소드도 상속 대상에서 제외된다.



현실에서 부모 없는 자식이 있을 수 없듯이 자바에서도 자식 객체를 생성하면, 부모 객체가 먼저 생성되고 그 다음에 자식 객체가 생성된다.
개발자가 직접 부모 객체를 생성하지 않아도, 컴파일러가 알아서 부모 객체를 생성해준다.
그 방식으로 컴파일러는 자식 생성자의 맨 첫줄에서 super()를 통해 부모의 기본 생성자를 호출하게 된다.



메서드 재정의

메서드 재정의는 자식 클래스에서 부모 클래스의 메서드를 다시 정의하는 것을 말한다. 메서드를 재정의할 때는 다음과 같은 규칙에 주의해서 작성해야 한다.
1. 부모의 메서드와 동일한 시그너처(리턴타입, 메서드 이름, 매개 변수 목록)를 가져야 한다.
2. 접근 제한을 더 가아게 재정의할 수 없다.
3. 새로운 예외(Exception)를 throws할 수 없다.


자식 클래스에서 부모 클래스의 메서드를 재정의하게 되면, 부모 클래스의 메서드는 숨겨지고 재정의된 자식 메서드만 사용된다. 그러나 자식 클래스 내부에서 재정의된 부모 클래스의 메서드를 호출해야하는 상황이 발생한다면 super를 통해 부모 메서드를 호출할 수 있다. ex) super.부모메서드();

상속할 수 없는 final 클래스

클래스를 선언할 때 final 키워드를 class 앞에 붙이면 이 클래스는 최종적인 클래스이므로 상속할 수 없는 클래스가 된다. 즉, final 클래스는 부모 클래스가 될 수 없어 자식 클래스를 만들 수 없다.

재정의할 수 없는 final 메서드

메서드를 선언할 때 final 키워드를 붙이면 이 메서드는 최종적인 메서드이므로 재정의할 수 없는 메서드가 된다. 즉, 부모 클래스를 상속해서 자식 클래스를 선언할 때 부모 클래스에 선언된 final 메서드는 자식 클래스에서 재정의할 수 없다.

1개의 댓글

comment-user-thumbnail
2023년 8월 11일

좋은 정보 얻어갑니다, 감사합니다.

답글 달기