추상 클래스
- 추상 클래스(abstract class)
- 추상 메소드를 포함한 클래스
- 미완성 메소드인 추상 메소드를 포함하기 때문에 객체 생성 불가
※익명 이너클래스
아래와 같이 완성시키면 추상클래스도 객체 생성 가능
public abstract class Animal {
public abstract void cry();
}
public class AnimalMain {
public static void main(String[] args) {
Animal ani2 = new Animal() {
@Override
public void cry() {//중괄호 있으므로 메소드 완성 }
};
}
}
- 오버라이딩과 구현
- 오버라이딩: 부모클래스의 메소드를 자식클래스에서 재정의
- 구현: 부모클래스의 미완성 메소드를 자식클래스에서 재정의
※ 메소드 완성, 미완성 기준: 중괄호의 존재여부, 중괄호 내에 내용이 없어도 완성된 메소드
- 추상클래스의 필요성
- 일반메소드는 자식클래스에서 상속 시 재정의하지 않아도 오류가 발생하지 않으므로 재정의를 놓칠 수가 있다.
- 추상메소드는 자식이 재정의하지 않으면 에러가 발생하므로 재정의를 놓치지 않게된다.
인터페이스
추상클래스의 특수한 형태
- 인터페이스
- 모든 필드는 상수(public static final)로 정의, public static final 생략 시 컴파일러가 자동으로 추가한다.
- 모든 메소드는 추상메소드(public abstract)로 정의, public abstract 생략 시 컴파일러가 자동으로 추가한다.
- 정적메소드(static method): 클래스 내부의 정적메소드와 사용방법이 동일하다.
- 추상클래스의 특수한 형태이므로 마찬가지로 객체 생성이 불가능하다.
- default 메소드는 public으로 정의한다. 필요에 의해 메소드를 추가하는 경우 추상메소드로 추가하면 구현했던 모든 클래스에 오류가 발생한다. 따라서 default 메소드를 만들어 사용한다.
- 인터페이스의 상속
- 상속 시 implements 사용
- 다중 상속 가능
필드는 모두 상수, 메소드는 미완성이라 자식이 완성해 사용하기 때문이다...