- 클래스들의 공통적인 특성을 추출해서 선언한 클래스
- 추상 클래스를 부모 타입으로, 객체로 생성될 실체 클래스가 자식 타입으로 구현되어 추상 클래스의 모든 특성을 물려받을 수 있음
- 추상 클래스는 공통되는 필드와 메소드를 추출해서 만들었기 때문에 객체를 직접 생성해서 사용할 수 없고 부모 클래스로만 사용
추상 클래스 선언
[접근 제한자] abstract] class 클래스명 { ... }
- 추상 클래스 내에 필드, 메소드, 생성자를 포함 가능
- 추상 클래스는 객체로 생성이 안되지만 참조 변수의 타입으로는 사용이 가능
public abstract class Animal {
private String name;
private String kinds;
public Animal() {
}
public Animal(String name, String kinds) {
this.name = name;
this.kinds = kinds;
}
public String bark() {
return "짖는다.";
}
}
Animal animal = new Animal();
Animal animal = new Dog();
추상 메소드
- 추상 클래스에 선언된 메소드가 자식 클래스마다 실행 내용이 달라야 하는 경우 추상 메소드 선언 가능
- 추상 메소드는 추상 클래스에서 선언할 수 있고 메소드의 선언부만 있는 메소드의 실행 내용인 중괄호{}가 없는 메소드
- 추상 클래스를 상속하는 자식 클래스는 반드시 추상 메소드를 오버라이딩 해야함
- 오버라이딩하지 않으면 컴파일 에러가 발생하는데 자식 클래스에서 내용을 채우도록 강제화 한다
[접근 제한자] abstract 반환형 메소드명([매개변수]);
public abstract class Animal {
private String name;
private String kinds;
public Animal() {
}
public Animal(String name, String kinds) {
this.name = name;
this.kinds = kinds;
}
public abstract String bark();
}
public class Dog extends Animal {
private int weight;
...
@Override
public String bark() {
return "멍멍~ 짖는다.";
}
}