부모 객체와 자식 객체로 나뉨
부모 클래스가 가지고 있는 멤버들을 자식 클래스에서 직접 작성하지 않고 상속받아
자신의 멤버처럼 사용할 수 있음
→ 코드의 재사용성
코드 길이 감소
코드를 공통적으로 관리하기 때문에 코드 추가 및 변경 용이
코드의 중복 제거
⇒ 유지보수에 크게 기여
[접근제한자] class 클래스명 extends 클래스명 {}
public class Academy(자식) extends Company(부모) {}
클래스 간의 상속 시에는 extends 키워드 사용
모든 클래스의 최상위 클래스는 Object 클래스임
부모 클래스의 생성자 및 초기화 블록은 상속되지 않음
super()를 사용해야 함부모의 private 멤버는 상속은 되나 직접 접근은 불가함
super()를 이용하여 부모 필드값에 전달해 생성하거나부모 객체의 생성자를 호출하는 메소드
super()가 존재함 (명시적으로 작성할 시에도, 최상단에 작성)super(매개변수1, 매개변수2 ... 매개변수n) 처럼 작성자식클래스 내에서 부모 클래스 객체에 접근하여 필드나 메소드 호출 시 사용
오버라이딩 != 오버로딩
오버라이딩 : 자식 클래스에서 부모클래스의 메소드를 재작성 하는 것
메소드 헤드라인 위에 Annotation을 표시함 @Override
접근 제어자를 부모의 것과 같거나 더 넓은 범위로 변경 할 수 있음
protected 일 경우protected 또는 public으로 가능부모 메소드의 예외처리 클래스 처리 범위보다 좁은 범위로 예외처리 클래스 수정 가능
메소드 이름이 동일해야 함
매개변수의 개수, 타입, 순서 동일해야 함
cf) 오버로딩의 경우 매개변수의 개수, 타입, 순서가 달라야 했음
리턴 타입이 동일해야 함
private 메소드는 오버라이딩 불가능
: 한 클래스 내에서 같은 이름의 메소드를 여러 개 정의하는 것
같은 이름의 메소드
다른 매개변수 선언부 (매개변수 타입, 개수, 순서)
| 오버라이딩 (Overriding) | 오버로딩 (Overloading) |
|---|---|
| 하위 클래스에서 메소드 정의 | 같은 클래스에서 메소드 정의 |
| 메소드 이름동일 매개변수 동일 (개수, 타입, 순서) 리턴 타입 동일 | 1. 메소드 이름 동일 2. 매개변수 다름 (개수, 타입, 순서) |
| 지역 메소드의 접근범위가 부모 메소드의 접근 범위보다 넓거나 같아야 함 | 접근 제어자와 상관 없음 |
| 범위가 좁아야 함 | 예외 처리와 상관 없음 |
: 상속이 불가능한 클래스
public final class finalClass {}
: 상속 시 오버라이딩이 불가능한 메소드
public final void method() {}
| 대상 | 사용 가능한 제어자 / 예약어 |
|---|---|
| 클래스 | public, (default), final, abstract |
| 메소드 | 모든 접근 제어자, final, abstract, static |
| 변수 | 모든 접근 제어자, final, static |
| 지역 변수 | fianl |
abstract와 final 동시에 사용 불가능static과 abstract 동시에 사용 불가능abstract 메소드의 접근제어자로 private 불가능