<aside>
</aside>
추상 클래스는 일반 부모 클래스와 달리 진정한 설계도에 가깝다. 구현이 되어있지 않은 메서드를 포함할 수 있으며 인스턴스화를 할 수 없기 때문이다. 무조건 자식 클래스에서 추상 클래스를 상속 받아 부모의 추상 메서드를 재정의하거나 확장(오버라이딩)해야만 한다.
결과적으로 추상 클래스는 클래스에 추상화를 접목 시켜 보다 구조적이게 객체를 설계하고, 프로그램의 유지보수성을 올려준다. 만일 프로그램에 어떠한 기능을 업그레이드한다고 하면 수정 / 추가에 대해 유연적이게 해주어, 퀄리티 높은 프로그램과 솔루션을 개발할 수 있게 해준다.
기본적으로 추상 메서드를 지닌 클래스를 추상 클래스라고 한다. abstract
키워드를 활용하며, 추상 메서드는 빈껍데기만 있다.
public abstract class Document {
private String company;
public String title;
public String author;
public Document() {
this.company = "주식회사 이복둥";
}
public abstract void write();
}
추상 클래스는 절대 직접적으로 인스턴스화를 하지 못한다. 자식 클래스에서 상속한 후 자식 클래스를 인스턴스화해야만 한다.
Document doc = new Document(); // 컴파일 에러
자식 클래스에서는 부모 추상 클래스의 abstract 메서드를 반드시 오버라이딩해야만 한다. 아래 코드에서 write()
메서드를 오버라이딩하지 않으면 컴파일 단계에서 에러가 난다.
public class Pdf extends Document {
public Pdf(String title, String author) {
this.title = title;
this.author = author;
}
@Override
public void write() {
System.out.println("제목 : " + this.title);
System.out.println("저자 : " + this.author);
System.out.println("Writing PDF");
}
}
public class Excel extends Document {
public Excel(String title, String author) {
this.title = title;
this.author = author;
}
@Override
public void write() {
System.out.println("제목 : " + this.title);
System.out.println("저자 : " + this.author);
System.out.println("Writing EXCEL");
}
}