👉 Extends ⇒ 상속
- 상속
- 클래스가 다른 클래스를 상속할 때 사용(추상 클래스 포함)
- 코드 재사용
- 부모 클래스의 멤버 변수와 메서드를 자식 클래스에서 재사용할 수 있음
- 단일 상속
- Java에서 클래스는 단일 상속만 지원
- 즉, 하나의 클래스는 하나의 부모 클래스만 상속할 수 있음
- 메서드 오버라이딩
- 자식 클래스는 부모 클래스의 메서드를 오버라이딩하여 구현을 변경할 수 있음
- 부모 클래스의 생성자 호출
- super()를 사용하여 부모 클래스의 생성자를 호출할 수 있음
class Animal {
void makeSound() {
System.out.println("Animal sound");
}
}
class Dog extends Animal {
void makeSound() {
System.out.println("Woof Woof");
}
}
👉 Implements ⇒ 구현
- 인터페이스 구현
- implements 키워드는 클래스가 인터페이스를 구현할 때 사용
- 메서드 구현
- 인터페이스에 선언된 모든 메서드를 클래스에서 구현해야 함
- 다중 구현
- Java에서는 다중 인터페이스 구현이 가능
- 즉, 하나의 클래스는 여러 인터페이스를 구현할 수 있음
- 추상 메서드
- 인터페이스는 구현된 메서드 없이 메서드의 시그니처만 정의
- 이를 구현한 클래스는 이 메서드를 구현해야 함
interface Movable {
void move();
}
class Car implements Movable {
public void move() {
System.out.println("Car is moving");
}
}
👉 구현과 상속은 동시에 사용 가능
class ElectricCar extends Car implements Movable, Rechargeable {
}
👉 추상 클래스와 인터페이스의 차이
- 추상 클래스 사용 시기
- 상속 관계를 쭉 타고 올라갔을 때 같은 조상 클래스를 상속하는데 기능까지 완벽히 똑같은 기능이 필요한 경우
- 추상 클래스 = 상속을 위한 클래스 = IS-A 관계 = 미완성 설계도라고 표현
- 인터페이스 사용 시기
- 상속 관계를 쭉 타고 올라갔을 때 다른 조상 클래스를 상속하는데 같은 기능이 필요한 경우
- 인터페이스 = 다중상속(구현) 가능 = HAS-A 관계 = 기본 설계도라고 표현
- 모든 클래스가 인터페이스를 사용하여 기본 틀을 구성한다면 공통으로 필요한 기능들도 모든 클래스에서 오버라이딩 하여 재정의 해야 하는 번거로움이 있음