굳이 몰라도 되는 디테일한 정보는 숨기고 꼭 필요한 정보만 공개하는 과정이다.
추상 클래스, 인터페이스를 사용하여 데이터 추상화가 가능하다.
해당 클래스/메소드가 추상 클래스/추상 메소드임을 명시하는 예약어
추상 클래스 : 아직 완성되지 않은 클래스
추상 메소드 : 추상클래스 또는 인터페이스에서 사용 가능한, 껍데기만 있는 메소드
- 추상 클래스는 추상 메소드를 가질 수도 있고 가지지 않을 수도 있다.
- 추상 클래스는 객체를 생성할 수 없다.
- 추상 클래스는 상속한 자식 클래스로는 객체를 만드는 것이 가능하다.
- 추상 메소드가 추상클래스가 있다고 한다면 자식 클래스에서는 추상 메소드를 반드시 구현해야된다.
작성법
// abstract를 접근 제어자 앞에 작성
abstract 접근 제어자 class 클래스명 {
abstract 접근 제어자 반환형 메소드명();
}
// abstract를 접근 제어자 뒤에 작성
접근 제어자 abstract class 클래스명 {
접근 제어자 abstract 반환형 메소드명();
}
Camera는 추상클래스이고 FactoryCam, SpeedCam은 Camera 추상클래스를 상속 받는다.
// Camera.java
package chap_08.camera;
public abstract class Camera {
public void takePicture(){
System.out.println("사진을 촬영합니다.");
}
public void recordVideo(){
System.out.println("동영상을 녹화합니다.");
}
//추상 메소드 선언 즉, 구현해야 하는 메소드
public abstract void showMainFeature();
}
//FactoryCam.java
package chap_08.camera;
public class FactoryCam extends Camera {
@Override
public void showMainFeature() {
System.out.println("화재 감지");
}
}
//SpeedCam.java
package chap_08.camera;
public class SpeedCam extends Camera{
@Override
public void showMainFeature() {
System.out.println("속도 측정, 번호 인식");
}
}
package chap_08;
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) {
// Camera camera = new Camera(); 카메라는 객체로 만들 수 없다. 추상클래스이기 때문에
// FactoryCam factoryCam = new FactoryCam();
Camera factoryCam = new FactoryCam(); //추상 클래스로명으로도 객체 생성 가능
factoryCam.showMainFeature();
// SpeedCam speedCam = new SpeedCam();
Camera speedCam = new SpeedCam();
speedCam.showMainFeature();
}
}