부모 객체와 자식 객체로 나뉨
부모 클래스가 가지고 있는 멤버들을 자식 클래스에서 직접 작성하지 않고 상속받아
자신의 멤버처럼 사용할 수 있음
→ 코드의 재사용성
코드 길이 감소
코드를 공통적으로 관리하기 때문에 코드 추가 및 변경 용이
코드의 중복 제거
⇒ 유지보수에 크게 기여
[접근제한자] 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
불가능