- 상속
- 단일 상속과 다중 상속
- super ( ) 와 super
- 오버라이딩 (Overriding)
- 오버로딩 (Overloading)
- final 예약어
- 대상에 따른 제어자와 예약어
부모 클래스가 가지고 있는 필드나 메서드를 자식 클래스가 물려 받아 자신의 것처럼
사용하는 것이다.
클래스의 재사용 및 연관된 일련의 클래스들에 대한 공통적인 규약 정의
public class Academy extends Company { }
모든 클래스는 Object 클래스의 후손이다. 따라서 Object 가 제공하는 메소드를 오버라이딩하여 메소드 재구현이 가능하다.
부모 클래스의 생성자와 초기화 블록은 상속이 안 된다. 자식 클래스 생성자 안에서 부모 클래스 생성자 호출을 명시하려면 super ( ) 을 활용한다.
부모의 private 멤버는 상속은 되지만 직접 접근이 불가하다. setter 및 getter 를 이용해 접근하거나 전달받은 부모 필드 값을 super ( ) 을 통해 부모 생성자 쪽으로 넘겨 생성한다.
단일 상속
클래스간의 관계가 다중 상속보다 명확하고 신뢰성 있는 코드 작성
자바에서는 다중 상속을 미지원하고 단일상속만 지원한다.
다중 상속
C++ 에서 가능한 기능으로 여러 클래스로부터 상속을 받으며 복합적인 기능을 가진 클래스를 쉽게 작성 가능하다. 서로 다른 클래스로부터 상속 받은 멤버 간의 이름이 같은 경우 문제가 발생한다.
super ()
부모 객체의 생성자를 호출하는 메소드로 기본적으로 후손 생성자에 부모 생성자가 포함된다. 후손 객체 생성 시 부모부터 생성 되므로 후손 클래스 생성자 안에는 부모 생성자를 호출하는 super ( ) 가 첫 줄에 존재하며 명시적 작성 시에도 반드시 첫 줄에만 작성한다.
// 매개변수가 있는 부모 생성자 호출
super (매개변수, 매개변수)
super
상속을 통한 자식 클래스 정의 시 해당 자식 클래스의 부모 객체를 가리키는 참조변수이다. 자식 클래스 내에서 부모 클래스 객체에 접근하여 필드나 메소드 호출 시 사용한다.
🎈 아주 중요한 개념으로 기술 면접 단골 질문
자식 클래스가 상속 받은 부모 메소드를 재작성 하는 것으로 부모가 제공하는 기능을 후손이 일부 고쳐 사용하겠다는 의미이다. 자식 객체를 통한 실행 시 후손 것이 우선권을 가진다.
메소드 헤드라인 위에 컴퓨터를 위한 주석인 Annotation 중 @Override
를 표시하여
검사를 진행할 수 있고 접근 제어자를 부모 것보다 같거나 넓은 범위로 변경 가능하다.
부모 메소드의 예외처리 클래스 처리범위보다 좁은 범위로 예외처리 클래스 수정이 가능하다.
부모 클래스의 메소드와 자식 클래스의 메소드 비교
한 클래스 내에서 같은 이름의 메소드를 여러 개 정의하는 것이다.
메소드의 리턴타입은 오버로딩 조건과 관계 없음
오버라이딩 | 오버로딩 |
---|---|
하위 클래스에서 메소드 정의 | 같은 클래스에서 메소드 정의 |
메소드 이름 동일 매개변수 개수 및 타입 및 순서 동일 리턴 타입 동일 | 메소드 이름 동일 매개변수 개수 및 타입 및 순서 다름 리턴 타입 상관 없음 |
자식 메소드의 접근 범위가 부모 메소드의 접근 범위보다 넓거나 같아야함 | 접근 제어자와 상관 없음 |
자식 메소드의 예외 수가 부모 메소드의 예외 수보다 적거나 범위가 좁아야함 | 예외처리와 상관 없음 |
public final class finalClass { }
public final void method() { }
대상 | 사용 가능한 제어자와 예약어 |
---|---|
클래스 | public (default) final abstract |
메소드 | 모든 접근 제어자 final abstract static |
변수 | 모든 접근 제어자 final static |
지역변수 | final |