extends vs implements

상속과 구현 비교

상속은 기존 동작을 물려받는 관계이고 구현은 특정 계약을 만족하겠다는 선언입니다.

extends

부모 구현 재사용

자식 클래스가 부모의 public, protected 멤버를 물려받아 확장합니다.

class Dog extends Animal
super 호출

부모 초기화 연결

자식 생성자에서 this를 쓰기 전에 부모 생성자를 먼저 실행합니다.

super(name)
implements

인터페이스 계약 이행

클래스가 인터페이스에 선언된 모든 멤버를 구현하도록 강제합니다.

class Bot implements Runnable
다형성

공통 타입으로 취급

서로 다른 구현체를 같은 부모나 인터페이스 타입으로 다룰 수 있습니다.

Runnable[]
오버라이딩 부모 메서드를 바꿀 때 반환 타입과 호출 계약이 깨지지 않는지 확인합니다.
다중 역할 여러 기능 집합은 다중 상속 대신 여러 인터페이스 구현으로 표현합니다.
설계 질문 정말 is-a 관계인지, 단지 같은 기능을 제공하는지 구분합니다.

상속과 구현을 구분하면 재사용을 위해 묶을 코드와 계약으로만 묶을 타입이 선명해집니다.