추상 클래스는 미완성된 클래스이다.
미완성된 클래스는 미완성된 메소드인 추상 메소드를 포함하고 있다.
추상 클래스는 혼자로는 클래스의 역할을 다 못하지만, 새로운 클래스를 작성하는 데 있어 그 바탕이 되는 부모 클래스로서의 중요한 의미를 갖는다. 왜냐하면 클래스를 작성함에 있어서 어느정도 작성된 상태에서 시작할 수 있기 때문이다.
클래스 앞에 abstract 키워드를 붙인다.
abstract class Car {
abstract void accelrate();
}
기존의 클래스에서 공통된 부분을 추상화하여 상속하는 클래스에게 구현을 강제화한다. 메소드의 동작을 구현하는 자식 클래스에게 위임한다.
공유의 목적을 갖고 있다.
추상 클래스는 추상 메소드가 아닌 일반 메소드, 멤버도 포함할 수 있다. 하지만 추상 메소드를 하나라도 포함하고 있다면 추상 클래스로 선언해야 한다.
추상 클래스는 동작이 정의되지 않은 추상 메소드를 포함하고 있으므로 인스턴스를 생성할 수 없다.
abstract class Animal {
abstract void cry();
}
class Cat extends Animal {
@Override
void cry(){
System.out.println("냐옹냐옹 ~~!");
}
}
class Dog extends Animal {
@Override
void cry(){
System.out.println("멍멍 ~~!");
}
}
public class Test{
public static void main(String[] args){
// Animal animal = new Animal();
// 추상 클래스는 자체적으로 인스턴스를 생성할 수 없다. 불완전하기 때문에.
Cat cat = new Cat();
Dog dog = new Dog();
cat.cry();
dog.cry();
}
}
냐옹냐옹 ~~!
멍멍 ~~!
추상 클래스인 Animal은 추상 메소드인 cry()를 가지고 있으며, Animal 클래스를 상속받는 자식 클래스인 Dog, Cat 클래스는 cry() 메소드를 오버라이딩 해야만 인스턴스를 생성할 수 있다.