κ΅³μ΄ λͺ°λΌλ λλ λν μΌν μ 보λ μ¨κΈ°κ³ κΌ νμν μ λ³΄λ§ κ³΅κ°νλ κ³Όμ μ΄λ€.
μΆμ ν΄λμ€, μΈν°νμ΄μ€λ₯Ό μ¬μ©νμ¬ λ°μ΄ν° μΆμνκ° κ°λ₯νλ€.
ν΄λΉ ν΄λμ€/λ©μλκ° μΆμ ν΄λμ€/μΆμ λ©μλμμ λͺ μνλ μμ½μ΄
μΆμ ν΄λμ€ : μμ§ μμ±λμ§ μμ ν΄λμ€
μΆμ λ©μλ : μΆμν΄λμ€ λλ μΈν°νμ΄μ€μμ μ¬μ© κ°λ₯ν, κ»λ°κΈ°λ§ μλ λ©μλ
- μΆμ ν΄λμ€λ μΆμ λ©μλλ₯Ό κ°μ§ μλ μκ³ κ°μ§μ§ μμ μλ μλ€.
- μΆμ ν΄λμ€λ κ°μ²΄λ₯Ό μμ±ν μ μλ€.
- μΆμ ν΄λμ€λ μμν μμ ν΄λμ€λ‘λ κ°μ²΄λ₯Ό λ§λλ κ²μ΄ κ°λ₯νλ€.
- μΆμ λ©μλκ° μΆμν΄λμ€κ° μλ€κ³ νλ€λ©΄ μμ ν΄λμ€μμλ μΆμ λ©μλλ₯Ό λ°λμ ꡬνν΄μΌλλ€.
μμ±λ²
// 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();
}
}