추상클래스(abstract class)
public abstract class Tv {
public abstract void show();
}
- 선언은 상위클래스에 하고, 구현의 책임을 하위클래스에 위임하는 형태.
- 추상 메소드를 하나라도 포함하는 class는 추상 클래스이다. 추상 클래스는 인스턴스 생성이 불가능하다.( 추상 메소드 = body가 없는 메소드 )
- 메소드가 전부 구현돼있더라도, abstract가 포함돼있다면 추상클래스이다.
: 상속을 하기 위한, 기반이 되는 클래스에 abstract 를 붙인다.
abstract class Computer{
public abstract void message();
public void turnOn(){
System.out.println("켠다");
}
}
class NoteBook extends Computer{
@Override
public void message(){
System.out.println("노트북");
}
}
class Desktop extends Computer{
@Override
public void message() {
System.out.println("데스크탑");
}
}
public class AbstractTest {
public static void main(String args[]){
Computer computerNoteBook = new NoteBook();
Computer computerDesktop = new Desktop();
AbstractTest test = new AbstractTest();
test.method(computerDesktop);
test.method(computerNoteBook);
}
public void method(Computer computer){
computer.message();
}
}
출력결과:
데스크탑
노트북
추상클래스의 장점은 위의 코드와 같이 다형성을 잘 이용할 수 있다는 데 있다.
템플릿 메서드(Template method)
추상 메서드나 구현된 메서드를 활용하여 전체의 흐름(시나리오)를 정의해놓은 메서드. final로 선언하여 재정의 할 수 없게 설계해놨다.
※ 템플릿 메서드 패턴 : 프레임 워크에서 자주 사용되는 패턴. 전체 구현의 흐름은 미리 정해놓고, 구체적 메서드 구현만 하위 클래스에 위임해놓는 형태.
Defines the skeleton of an algorithm in a method, deferring some steps to subclasses. Template Method lets subclasses redefine certain steps of an algorithm without changing the algorithms structure. – GoF Design Patterns
abstract class Car1{
public abstract void drive();
public void stop(){
System.out.println("멈춘다");
};
public void start(){
System.out.println("부릉부릉");
};
final public void run(){
start();
drive();
stop();
}
}
class AiCar extends Car1{
@Override
public void drive() {
System.out.println("달려볼까?");
}
}
public class Test {
public static void main(String args[]){
Car1 car = new AiCar();
car.run();
}
}
출력결과:
부릉부릉
달려볼까?
멈춘다
차의 주행은 엄격하게 순서가 지켜져야 한다. 이와 같이 하위클래스에서 건들면 안되는 메서드에 대해서 final 로 선언해서 순서를 따르게 하는 형태를 템플릿 메서드라고 한다.
'정리하기 이전 자료 ( before 20-11 ) > Java' 카테고리의 다른 글
Naming Conventions (0) | 2020.04.06 |
---|---|
인터페이스 (0) | 2020.03.30 |
DownCasting & instance of (0) | 2020.03.29 |
상속에서의 생성자 (0) | 2020.03.29 |
다형성 , 상속, 가상함수 , 동적바인딩 (0) | 2020.03.28 |
댓글