- Do it! 자바 프로그래밍 입문 온라인 강의를 수강하며 작성하였습니다.
- Section 1. 자바의 핵심 - 객체지향 프로그래밍
- 26강 "추상클래스 활용하기(1)"
- 추상 클래스란? (abstract class) > 추상 클래스와 템플릿 메서드 > 추상 클래스의 사용 > 추상 클래스 구현하기
//추상 메서드를 포함하므로 추상 클래스임. (abstract 예약어 사용)
public abstract class Computer {
//추상 메서드 (상속받는 class에서 구현해야 함)
public abstract void display();
public abstract void typing();
// 구현 내용이 있으므로 추상 메서드가 아님
public void turnOn() {
System.out.println("전원을 켭니다.");
}
public void turnOff() {
System.out.println("전원을 끕니다.");
}
}
//Computer(abstract 클래스)를 상속받으므로 추상 메서드를 모두 구현해야 함
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()");
}
}
//NoteBook 클래스에서 구현한 추상 메서드는 다시 구현할 필요 없음
public class MyNoteBook extends NoteBook{
@Override
public void typing() {
System.out.println("MyNoteBook typing()");
}
}
예시로 작성하지는 않았지만 추상 클래스의 추상 메서드를 하위 클래스가 overriding 하여 재정의 할 수 있다.
Computer c1 = new Computer(); //error! 추상 클래스는 new(인스턴스화) 불가
Computer c2 = new DeskTop(); //DeskTop 클래스는 인스턴스화 가능하며, 업캐스팅 가능
Computer c3 = new MyNoteBook(); //MyNoteBook 클래스는 인스턴스화 가능
NoteBook c4 = new MyNoteBook(); //MyNoteBook 클래스는 Computer와 NoteBook으로 업캐스팅 가능