문제점
- Animal 클래스를 생성할 필요가 없다.
- Animal 클래스를 상속받는 곳에서 sound() 메서드를 오버라이딩 하지 않을 가능성이 있다.
⇒ 추상 클래스 도입
추상 클래스
추상적인 개념을 제공하는 클래스로, 인스턴스가 존재하지 않는다.
abstract class AbstractAnimal {...}
추상 메서드
추상적인 개념을 제공하는 메서드로 실체가 존재하지 않는다.
자식 클래스가 반드시 오버라이딩 해야 한다.
public abstract void sound();
- 추상 메서드가 하나라도 있는 클래스는 추상 클래스로 선언해야 한다. -> 그렇지 않으면 컴파일 오류
- 추상 메서드는 자식 클래스가 오버라이딩 하지 않으면 자식도 추상 클래스가 되어야 한다.
만약 추상 클래스의 모든 메서드가 추상 메서드라면 순수 추상 클래스라 한다.
부모의 모든 메서드를 구현해야만 한다.
⇒ 이와 같은 의미인 인터페이스가 도입
인터페이스
implements 키워드 사용
public interface InterfaceAnimal {
(public static final) int MY_PI = 3.14 // 인터페이스에서 멤버 변수 = 상수
(public abstract) void sound(); // public abstract 생략 가능
(public abstract) void move();
}
인터페이스의 다중 구현
상속의 경우, 만약에 자식이 여러 부모를 상속 받는 다면
부모들이 같은 이름의 메서드를 가질 때 자식이 어떤 메서드를 호출해야 할지 모르는 문제가 있다.
그러나 인터페이스는 모두 추상 메서드로 이루어져있기 때문에
부모 클래스에 같은 이름의 메서드가 여러개 있어도 어처피 오버라이딩된 자식의 메서드가 호출되어 문제가 발생하지 않는다.
⇒ 다중 구현을 허용한다.
참고) 김영한 - 실전 자바
'BACK > JAVA' 카테고리의 다른 글
[JAVA] 자바 메모리 구조와 static (0) | 2024.05.16 |
---|---|
[JAVA] 실전 자바 - 다형성과 설계 (0) | 2024.01.30 |
[JAVA] 실전 자바 - 다형성(다형적 참조, 메서드 오버라이딩) (1) | 2024.01.30 |
[JAVA] 실전 자바 - 상속, super (0) | 2024.01.30 |
[JAVA] 실전 자바 - Final 키워드 (1) | 2024.01.30 |