추상 클래스의 응용 – 템플릿 메서드

템플릿 방법

● 추상 메소드 또는 구현 메소드를 사용하여 코드 흐름(시나리오)을 정의하는 메소드

● 하위 클래스에서 재정의할 수 없도록 final로 선언합니다.

● 프레임워크에서 널리 사용되는 디자인 패턴.

● 추상 클래스로 선언된 슈퍼 클래스와 서브 클래스에서 템플릿 메소드를 이용하여 전체적인 흐름을 정의한다.

● 다르게 구현되는 부분은 추상 메소드로 선언되어 서브클래스에서 구현된다.

마지막 예약어

● 종료 변수: 값을 변경할 수 없는 상수.

공개 정적 최종 이중 PI = 3.14;

● 마지막 메서드: 하위 클래스에서 재정의할 수 없는 메서드

● End Class : 상속받을 수 없는 Class

하나
2
4
5
6
7
8일
9
10
11
12
13
14
15
16
패키지 ch13;
공공의 수업 메인 테스트1 {
공공의 공전 비어 있는 주로(() 인수) {
아이카 아이카 = 새로운 아이카();
aiCar.run();
체계.에서.프린트(“————“);
수동자동 수동자동 = 새로운 수동자동차();
manualCar.run();
manualCar.run();
}
}
CS
하나
2
4
5
6
7
8일
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
패키지 ch13;
공공의 수업 아이카 퍼지는 자동차 {
@덮어쓰기
공공의 비어 있는 운전하다() {
체계.에서.프린트(“나는 자율주행”);
체계.에서.프린트(“자동차가 스스로 움직인다”);
}
@덮어쓰기
공공의 비어 있는 그만하다() {
체계.에서.프린트(“차가 저절로 멈춘다”);
}
@덮어쓰기
공공의 비어 있는 와이퍼 () {
체계.에서.프린트(“빗물은 직접 치우세요”);
}
@덮어쓰기
공공의 비어 있는 세차() {
체계.에서.프린트(“내 차는 내가 직접 세차한다”);
}
}
CS
하나
2
4
5
6
7
8일
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
패키지 ch13;
/**
*
*
*
* @author GGG 템플릿 메서드 샘플 구현 핵심 메서드 run()
*
*/
공공의 추상적인 수업 자동차 {
보호 추상적인 비어 있는 운전하다();
보호 추상적인 비어 있는 그만하다();
사적인 비어 있는 시작자동() {
체계.에서.프린트(“엔진을 켜십시오”);
}
사적인 비어 있는 끄다() {
체계.에서.프린트(“꺼져”);
}
공공의 추상적인 비어 있는 와이퍼();
//후크 방법
공공의 비어 있는 세차() {
// 아무 것도 구현하지 않습니다 –> 일반적인 방법입니다.

}
// 실행 흐름 생성
// 재정의 불가능하게 만들기 –> 최종(메서드 이전)
// 하위 클래스에서 재정의할 수 없습니다.

결정적인 공공의 비어 있는 달리다() {
startAuto();
운전하다();
와이퍼();
그만하다();
끄다();
세차();
}
}
CS
하나
2
4
5
6
7
8일
9
10
11
12
13
14
15
16
17
18
19
20
패키지 ch13;
공공의 수업 수동차 퍼지는 자동차 {
@덮어쓰기
공공의 비어 있는 운전하다() {
체계.에서.프린트(“피플 드라이브”);
}
@덮어쓰기
공공의 비어 있는 그만하다() {
체계.에서.프린트(“사람들이 브레이크를 밟고 있다”);
}
@덮어쓰기
공공의 비어 있는 와이퍼 () {
체계.에서.프린트(“사람이 일하게 만든다”);
}
}
CS