반응형
추상 클래스란?
- 구현 코드 없이 메서드의 선언만 있는 추상 메서드(abstrct method)를 포함한 클래스
- 메서드 선언(declaration) : 반환 타입, 메서드 이름, 매개변수로 구성
- 메서드 정의(definition) : 메서드 구현(implementation)과 동일한 의미 구현부(body)를 가짐 → ({ })
int add(int x, int y); //선언
int add(int x, int y) { } // 구현부가 있음, 추상 메서드 아님
- abstract 예약어를 사용
- 추상 클래스는 new 할 수 없음( 인스턴스화 할 수 없음)
추상 클래스 구현하기
- 메서드에 구현 코드가 없으면 abstract로 선언
- abstract로 선언된 메서드를 가진 클래스는 abstract로 선언
- 모든 메서드가 구현된 클래스라도 abstract로 선언되면 추상 클래스로 인스턴스화 할 수 없음
- 추상 클래스의 추상 메서드는 하위 클래스가 상속하여 구현
- 추상 클래스 내의 추상 메서드 : 하위 클래스가 구현해야 하는 메서드
- 추상 클래스 내의 구현된 메서드 : 하위 클래스가 공통으로 사용하는 메서드 ( 필요에 따라 하위 클래스에서 재정의 함)
예제 구현
Computer를 상위 클래스로 DeskTop, NoteBook을 상속하게 구현
위 설계에서 보이는 메서드, 클래스를 봤을 때
비스듬한 글씨체 : 구현부가 없는 추상 클래스, 추상 메서드
정자 글씨체 : 구현된 메서드
1. Computer 클래스 (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("전원을 끕니다.");
}
}
- Computer라는 클래스에는 구현부가 있는 메서드와 구현부가 없는 메서드가 있다 따라서 abstract를 적어 추상 클래스란 것을 나타내어 준다.
- 구현부가 없는 메서드도 abstract를 적어 추상 메서드란 것을 명시해준다.
- abstract는 하위 클래스에서 구현해준다.
2. Computer를 상속받은 하위 클래스 DeskTop
public class DeskTop extends Computer{
@Override
public void display() {
System.out.println("Desktop display");
}
@Override
public void typing() {
System.out.println("Desktop typing");
}
//turn off 재정의
@Override
public void turnOff() {
System.out.println("Desktop turnOff");
}
}
- DeskTop은 Computer의 추상 클래스를 모두 받아서 구현해준다.
- 추가로 turn off 메서드를 재정의 해주었다.
3. Computer를 상속받은 하위 클래스 NoteBook
public abstract class NoteBook extends Computer {
@Override
public void display() {
System.out.println("NoteBook display");
}
}
- NoteBook은 Computer을 상속받았으나 Computer의 abstract method를 다 구현하지 않았다.
- 따라서 NoteBook 또한 abstract class가 된다. ( 이는 하위 클래스를 한번 더 만들고 책임을 위임해줘야 한다.)
4. NoteBook를 상속받은 하위 클래스 MyNoteBook
public class MyNoteBook extends NoteBook{
@Override
public void typing() {
System.out.println("MyNoteBook typing");
}
}
- MyNoteBook은 NoteBook클래스에서 다 구현하지 않은 추상 메서드를 구현한다.
반응형
'개발 > Java' 카테고리의 다른 글
인터페이스(interface) (2) | 2021.04.27 |
---|---|
추상 클래스의 응용 - 템플릿 메서드 패턴 (0) | 2021.04.26 |
다운 캐스팅과 instanceof (0) | 2021.04.26 |
오버라이딩(Overriding) (0) | 2021.04.25 |
객체 간의 상속 (0) | 2021.04.24 |