'추상클래스'란 '추상메서드'를 포함하는 클래스입니다.
그럼 추상메서드가 뭐냐?
추상메서드는 구현 코드(함수 몸체)가 없는 메서드입니다.
중괄호 {}로 감싼 부분을 함수의 구현부라고 하고, 이 부분이 없는 함수를 추상함수라고 합니다. 그리고 이 추상함수를 포함하는 클래스를 추상클래스라고 합니다.
public abstract int add(int x, int y);
위 코드처럼 선언만 하며, abstract 예약어를 사용합니다.
public abstract class Computer {
public abstract void display();
public abstract void typing();
public void turnOn() {
System.out.println("전원을 켭니다.");
}
public void turnOff() {
System.out.println("전원을 끕니다.");
}
}
public class Desktop extends Computer {
@Override
public void display() {
System.out.println("Desktop display()");
}
@Override
public void typing() {
System.out.println("Desktop typing()");
}
}
public abstract class NoteBook extends Computer {
@Override
public void display() {
System.out.println("NoteBook display()");
}
}
public class MyNoteBook extends NoteBook {
@Override
public void typing() {
System.out.println("MyNoteBook typing()");
}
}
Computer 클래스를 보면 클래스를 선언할 때와 함수의 몸체가 구현되지 않은 추상메서드 앞에 abstract 예약어가 있는데, 이게 추상메서드이고 추상메서드를 포함한 추상클래스가 된다.
Computer 클래스를 상속받는 클래스 중 turnOn()과 turnOff() 구현 코드는 공통이지만,
display()와 typing()은 하위클래스에 따라 구현이 달라질 수 있기 때문에 Computer 클래스에서 구현하지 않고,
이 두 메서드의 구현은 상속받는 하위클래스에 위임한다라는 의미이다.
Desktop 클래스는 추상클래스인 Computer 클래스를 상속받았기 때문에 추상메서드 또한 상속받게 된다.
그렇기 때문에 Computer 클래스에서 추상메서드를 모두 구현하거나, Desktop 클래스 또한 추상클래스가 되어야한다.
Desktop 클래스는 추상메서드를 모두 구현한 경우이다.
NoteBook 클래스는 상속받은 추상메서드를 모두 구현하지 않고 display() 하나만 구현했다.
그러므로 NoteBook 클래스는 추상메서드를 하나(typing()) 가지고 있기 때문에 추상클래스가 된다.
MyNoteBook 클래스는 NoteBook 클래스에서 구현하지 않은 typing() 메서드까지 구현했기 때문에
추상클래스가 아니고, 그래서 abstract 예약어를 사용하지 않았다.
정리해보면 추상클래스에서,
구현된 메서드 : 하위 클래스에서 공통으로 사용할 구현코드, 하위클래스에서 재정의할 수도 있음
추상 메서드 : 하위 클래스가 어떤 클래스냐에 따라 구현코드가 달라짐.
추상클래스에서 중요한 점
추상클래스는 인스턴스를 생성할 수 없다. // 구현된 코드가 없는 메서드가 있으므로 수행할 수 있는 내용이 없기 때문.
추상클래스는 상속을 하기 위해 만든 클래스이다. // 공통으로 사용할 메서드는 구현하고, 하위클래스에 따라 달라지는
메서드는 따로 구현하도록.
'자바 기초' 카테고리의 다른 글
자바 인터페이스 - Do it! 자바프로그래밍기초 (0) | 2022.07.22 |
---|---|
자바 템플릿 메서드, final - Do it! 자바프로그래밍기초 (0) | 2022.07.22 |
자바 다형성 -Do it! 자바프로그래밍기초 (0) | 2022.07.22 |
자바 메서드 오버라이딩, 클래스 형 변환 - Do it ! 자바프로그래밍기초 (0) | 2022.07.21 |
자바 상속에서 클래스 생성, super - Do it! 자바프로그래밍기초 (0) | 2022.07.20 |