말 그대로 추상적인, 특정지지 않고 범위가 포괄적인 클래스를 일컫는다.
부모 class로써 작용할 수는 있지만, 구체적이지 않은 특징으로 그것이 객체가 될 수는 없다.
추상클래스는 보통 내부적으로 메소드가 abstract 키워드가 선언되어있다면, 해당 클래스도 이에 따라가서 abstract 한 클래스 즉 추상클래스가 된다.
public abstract class Bird{
public abstract void sing();
public void fly(){
System.out.println("flying");
}
}
추상클래스는 보통 부모클래스로 활용할 수 있고, 이에 따라 상속도 같이 활용한다면 효과적인 부분이 많다.
예를 들어 위의 Bird클래스에서 duck클래스를 상속받는다고 해보자.
public class duck extends Brid{
public void sing(){
System.out.println("꽥꽥");
} //override
}
위와 같이 추상클래스를 상속받아 추상메소드를 구체화한다는 점에서 활용가능하다.
※이때 추상메소드는 오버라이드하는 것과 같다.
public class duckTest{
public void main(String[] args){
Duck duck = new Duck;
duck.sing();
}
}
이 후 위와 같이, main에서 해당 인스턴스 및 내부적인 메소드를 사용가능하다.
public class duckTest{
public static void main(String[] args){
Bird duck = new Bird; //불가
}
}
위처럼 Bird라는 추상클래스는 인스턴스 생성이 불가능하다.