1. 추상 클래스
_01_AbstractClass
import chap_08.camera.Camera;
import chap_08.camera.FactoryCam;
import chap_08.camera.SpeedCam;
public class _01_AbstractClass {
public static void main(String[] args) {
// 데이터 추상화 (Data Abstraction) : 꼭 필요한 부분만 남기고 숨기는 것
// abstract
// 추상 클래스 (아직 완성되지 않은 클래스) : 모호해서 객체로 만들 수 없음
// 추상 메소드 (추상 클래스에서만 사용 가능한, 껍데기만 있는 메소드)
// Camera camera = new Camera();
FactoryCam factoryCam = new FactoryCam();
factoryCam.showMainFeature();
SpeedCam speedCam = new SpeedCam();
speedCam.showMainFeature();
}
}
*추상 클래스지만 부모 클래스로 호출 가능. (Camera factoryCam = new FactoryCam(); )
Camera
public abstract class Camera {
public void takePicture() {
System.out.println("사진을 촬영합니다.");
}
public void recordVideo() {
System.out.println("동영상을 녹화합니다.");
}
public abstract void showMainFeature(); // 구현해야 하는 메소드. 상속하는 자식 클래스에서 구현해야 함.
}
*abstract, 즉 추상 클래스는 자식 클래스에서 구현
*추상 클래스에서는 객체를 가질 수 없음
FactoryCam
@Override
public void showMainFeature() {
System.out.println("화재 감지");
}
SpeedCam
@Override
public void showMainFeature() {
System.out.println("속도 측정, 번호 인식");
}
2. 인터페이스
import chap_08.reporter.*;
public class _02_Interface {
public static void main(String[] args) {
// 인터페이스
Reportable normalReporter = new NormalReporter();
normalReporter.report();
Reportable videoReporter = new VideoReporter();
videoReporter.report();
*인터페이스를 통해 참조 가능
2. 인터페이스 (2)
Detectable 인터페이스
public interface Detectable {
void detect(); // 감지
}
*참고로 인터페이스 내의 모든 객체는 public abstract가 들어가는 것임 (따로 적어줄 필요는 없음)
*인터페이스 내에 변수를 정의하는 것은 자동으로 public static final 형태임 (따로 적어줄 필요는 없음)
FireDetector 클래스
public class FireDetector implements Detectable {
@Override
public void detect() {
System.out.println("일반 성능으로 화재를 감지합니다.");
}
}
_02_Interface 클래스
Detectable fireDetector = new FireDetector();
fireDetector.detect();
Detectable advancedFireDetector = new AdvancedFireDetector();
advancedFireDetector.detect();
FactoryCam 클래스
public class FactoryCam extends Camera implements Detectable, Reportable {
private Detectable detector;
private Reportable reporter;
public void setDetector(Detectable detector) {
this.detector = detector;
}
public void setReporter(Reportable reporter) {
this.reporter = reporter;
}
@Override
public void showMainFeature() {
System.out.println("화재 감지");
}
@Override
public void detect() {
detector.detect();
}
@Override
public void report() {
reporter.report();
}
_02_Interface 클래스
FactoryCam factoryCam = new FactoryCam();
factoryCam.setDetector(advancedFireDetector);
factoryCam.setReporter(videoReporter);
factoryCam.detect();
factoryCam.report();
'인강 보습 (인프런,유데미,패스트캠퍼스) > 나도코딩의 자바 기본편' 카테고리의 다른 글
제네릭스 (2) - Wrapper 클래스, ArrayList, LinkedList (0) | 2023.01.18 |
---|---|
제네릭스 - (1) (0) | 2023.01.18 |
클래스 (3) - 메소드 오버라이딩, 다형성, Super, 참조, Final, 열거형 (0) | 2023.01.17 |
클래스 (2) - This, 생성자, Getter&Setter, 접근제어자, 패키지, 상속 (0) | 2023.01.17 |
클래스 (1) - 클래스, 인스턴스 변수, 클래스 변수, 메소드, 메소드 오버로딩, 클래스 메소드 (0) | 2023.01.17 |