추상 클래스 (abstract class)
미완성 설계도. 미완성 메서드를 갖고있는 클래스
abstract class Player { // 추상클래스 (미완성 클래스)
abstract void play (int pos); // 추상메서드 (몸통 {}이 없는 미완성 메서드)
abstract void stop(); // 추상메서드
- 다른 클래스 작성에 도움을 주기 위한 것. 인스턴스 생성 불가
Player p = new Player(); // 에러. 추상 클래스의 인스턴스 생성 불가
- 상속을 통해 추상 메서드를 완성해야 인스턴스 생성 가능
class AudioPlayer extends Player {
void play(int pos) { /* 내용 생략 */ } // 추상 메서드를 구현 (몸통)
void stop() { /* 내용 생략 */ } // 추상 메서드를 구현 (몸통)
}
AudioPlayer ap = new AudioPlayer(); // OK
추상 메서드 (abstract method)
미완성 메서드. 구현부(몸통 {})가 없는 메서드
abstract 리턴타입 메서드이름 () ;
- 꼭 필요하지만 자손마다 다르게 구현될 것으로 예상되는 경우 사용
- 추상 메서드 호출가능 (호출할 때는 선언부만 필요)
< 예제 >
추상 클래스의 작성
여러 클래스에 공통적으로 사용될 수 있는 추상클래스를 바로 작성하거나 기존 클래스의 공통 부분을 뽑아서 추상클래스를 만듦
unit 배열에 추상메서드라도 move가 있어서 추상메서드의 move가 아닌, 각각 인스턴스의 구현된 메서드 move가 호출됨!
디폴트 메서드 (default method)
인터페이스에 새로운 메서드(추상 메서드)를 추가하기 어려움
이유 : 기존에 그 인터페이스를 구현했던 모든 클래스에 새로운 메소드를 구현해야 함
➔ 해결책 : 디폴트 메서드
interface MyInterface {
void method ();
default void newMethod () { }
}
인터페이스 원칙 ( 인터페이스의 모든 메서드는 추상메서드 ) 위반 ( 예외인 사항 )
< 디폴트 메서드가 기존의 메서드와 충돌할 때 해결책 >
1. 여러 인터페이스의 디폴트 메서드 간의 충돌
➔ 인터페이스를 구현한 클래스에서 디폴트 메서드를 오버라이딩
2. 디폴트 메서드와 조상 클래스의 메서드 간의 충돌
➔ 조상 클래스의 메서드가 상속되고, 디폴트 메서드는 무시됨
'JAVA > 자바의 정석' 카테고리의 다른 글
[자바의 정석 - 기초편] 7. (11) 인터페이스 장점 (0) | 2023.12.01 |
---|---|
[자바의 정석 - 기초편] 7. (10) 인터페이스 ( 선언 / 상속 / 구현 / 다형성 ) (0) | 2023.12.01 |
[자바의 정석 - 기초편] 7. (8) 매개변수의 다형성 / 여러 종류의 객체를 배열로 다루기 (0) | 2023.11.30 |
[자바의 정석 - 기초편] 7. (7) 다형성 ( 참조변수의 형변환 / instanceof 연산자 ) (0) | 2023.11.30 |
[자바의 정석 - 기초편] 7. (6) 캡슐화 / 다형성 (0) | 2023.11.30 |