- 하나 이상의 추상 메소드를 포함하는 클래스
- 반드시 구현해야 하는 부분에 대해 명시적으로 표현
- 추상 클래스 자체는 객체(인스턴스) 생성 불가
abstract class 클래스명 {}
abstract class Person {}
추상 클래스는 추상 메서드를 포함하고 있다는 것을 제외하고는 일반 클래스와 다르지 않다. 추상 클래스에도 생성자가 있으며, 멤버변수와 메서드도 가질 수 있다.
선언부만 작성하고 구현부는 작성하지 않은 채로 남겨둔 미완성 메서드다.
abstract 리턴타입 메서드명();
abstract void print();
상속 받는 자식 클래스마다 메서드가 다르게 구현될 것으로 예상되는 경우에 추상 메서드를 사용한다.
상속이 자식 클래스를 만드는데 부모 클래스를 사용하는 것이라면, 반대로 추상화는 기존의 클래스의 공통 부분을 뽑아내서 부모 클래스를 만드는 것이라 할 수 있다.
상속계층도를 따라 내려갈수록 클래스는 점점 기능이 추가되어 구체화의 정도가 심해지고, 상속계층도를 따라 올라갈수록 클래스는 추상화의 정도가 심해진다.
추상화 : 클래스간의 공통점을 찾아내 고통의 조상을 만드는 작업
구체화 : 상속을 통해 클래스를 구현, 확장하는 작업.
추상화된 코드는 구체화된 코드보다 유연하고 변경에 유리하다.
// 추상 클래스 Person
abstract class Person{
abstract void printInfo();
}
// 추상 클래스 상속
class Student extends Person{
public void printInfo() {
System.out.println("Stuendt.printInfo");
}
}
public class Main {
public static void main(String[] args) {
Person p = new Person(); // 추상클래스는 객체 생성 불가
Student s1 = new Student();
s1.printInfo();
< 익명 클래스 사용 >
Person p = new Person() {
void printInfo() {
System.out.println("Main.printInfo");
}
};
}
}