-
[JAVA]java 추상 클래스/템플렛 매서드Languages/Java 2021. 3. 1. 10:46반응형
추상클래스
추상 메서드를 포함한 클래스
추상 메서드는 구현코드 없이 메서드와 선언만 있다
avstract 예약어 사용
추상 클래스는 new(인스턴스화) 할수 없다ex)컴퓨터를 구현해본다고 하자
(+덧붙이는 설명 추상메서드를 구현할 시에는 클래스도 abstract를 선언해 주어야 한다.
선언이 아니고 구현이 일 시에는 ;이 아닌 {}인 body를 구현해 주어야 한다.
추상 메서드는 인스턴스 화 할수 없다(ComputerTest에서 확인 가능))
컴퓨터
package abstractEx; public abstract class Computer { public abstract void display();//메서드를 구현하는게 아니라 선언만 하겠다 public abstract void typing(); public void turnOn() { System.out.println("전원을 켭니다"); } public void turnOff() { System.out.println("전원을 끕니다"); } }
데스크탑
package abstractEx; public class DeskTop extends Computer { @Override public void display() { System.out.println("deskTop display();"); } @Override public void typing() { System.out.println("deskTop typing();"); } public void turnOn() { System.out.println("deskTop turnOn();"); } }
노트북
package abstractEx; public abstract class NoteBook extends Computer { @Override public void display() { System.out.println("NoteBook display();"); } }
나의 노트북
package abstractEx; public class MyNoteBook extends NoteBook { @Override public void typing() { System.out.println("MyNoteBook typing();"); } }
ComputerTest
package abstractEx; public class ComputerTest { public static void main(String[] args) { //Computer c1 = new Computer(); Computer c2 = new DeskTop(); //Computer c3 = new NoteBook(); Computer c4 = new MyNoteBook(); c2.display(); c4.display(); } }
실행결과
탬플렛 메서드
추상메서드나 구현된 메서드를 활용하여
전체 기능의 흐름을 정의하는 메서드
final로 선언하면 하위 클래스에서 재정의 할 수 없다
프레임 워크에서 많이 사용되는 설계 패턴
추상 클래스로 선언된 상위 클래스에 템플릿 메서드를 활용하여
전체적인 흐름을 정의 하고 하위 클래스에서 다르게 구현되어야
하는 부분은 추상 메서드로 선언해서 하위 클래스가 구현하도로 한다final 예약어
final 변수는 값이 변경될 수 없는 상수이다
final변수는 오직 한번만 값을 할당할수 있다
final매서드는 하위클래스에서 재정의(오버라이딩) 할수 없다
final 클래스는 더이상 상속되지 않는다
java의 String클래스ex)차를 구현해보자
Car
package template; public abstract class Car { public abstract void drive(); public abstract void stop(); public abstract void wiper(); public void washCar() {} public void startCar() { System.out.println("시동을 켭니다"); } public void turnOff() { System.out.println("시동을 끕니다"); } public final void run() { startCar(); drive(); wiper(); stop(); washCar(); turnOff(); //이부분이 템플렛 메서드를 활용한 부분!!!! } }
ManualCar
package template; public class ManualCar extends Car { @Override public void drive() { System.out.println("사람이 운전합니다"); System.out.println("사람이 핸들을 조작합니다"); } @Override public void stop() { System.out.println("사람이 브레이크로 정지합니다"); } @Override public void wiper() { System.out.println("사람이 수동으로 조작합니다"); } }
AICar
package template; public class AICar extends Car { @Override public void drive() { System.out.println("차를 주행합니다"); System.out.println("자동차가 스스로 방향을 전환합니다"); } @Override public void stop() { System.out.println("스스로 멈춥니다"); } public void wiper() { System.out.println("비나 눈의 양의 따라 자동으로 조정됩니다"); } @Override public void washCar() { System.out.println("자동으로 세차가 됩니다"); } }
CarTest
package template; public class CarTest { public static void main(String[] args) { Car myCar = new ManualCar(); myCar.run(); System.out.println("=========="); Car yourCar = new AICar(); yourCar.run(); } }
실행결과
반응형'Languages > Java' 카테고리의 다른 글
[java] object 클래스/toString()/래퍼 클래스/스트링/math클래스/Calendar 클래스 (0) 2021.04.23 [JAVA]java 인터페이스/인터페이스 구현과 형 변환/인터페이스와 다형성/인터페이스 상속 (0) 2021.03.08 [JAVA]java 오버로딩(overloading)과 java 오버라이딩(overriding)/java 다형성/java 다운캐스팅(downcasting) (0) 2021.02.28 [JAVA]java 상속의 개념/상속과 접근 제어/super/묵시적 형 변환 (0) 2021.02.23 [JAVA]객체 배열, 배열 복사, 다차원 배열, arraylist (0) 2021.02.22