김영한의 자바 강의를 듣고 정리한 내용입니다.
이전 글의 Animal 클래스(부모 클래스)와 같이 생성되면 안되는 클래스를 의미한다. 인스턴스는 존재하지 않고 상속 목적으로만 사용된다.
아래와 같이 abstract 라는 키워드를 클래스 앞에 선언하고 사용한다.
abstract class AbstractParent{
...
}
추상 클래스처럼 abstract 를 붙여주며 선언해야 한다. 메서드의 바디는 존재하지 않으며 단지 메서드의 형태만 제공한다. 따라서 추상 메서드는 상속 받는 자식 클래스가 반드시! 오버라이딩 하여 사용해야 한다.
또한 추상메서드가 하나라도 존재하면 해당 클래스를 추상 클래스로 바꿔야 한다.
abstract class AbstractParent {
public abstract void sound(); // 추상메서드 선언
public void move() {
System.out.println("동물이 움직입니다."); // 일반적인 메서드
}
}
public class Dog extends AbstractParent {
@Override
public void sound() {
System.out.println("멍멍");
}
}
public class Main {
public static void main(String[] args) {
Dog dog = new Dog();
soundAnimal(dog);
}
private static void soundAnimal(AbstractParent animal) {
animal.sound();
}
}
멍멍
근데 만약 추상 클래스의 모든 메서드가 추상 메서드라면?
그걸 인터페이스라고 한다.