1. μΆμ ν΄λμ€
κ°μ²΄λ₯Ό μ§μ μμ±ν μ μλ ν΄λμ€λ₯Ό μ€μ²΄ ν΄λμ€λΌ νλ€λ©΄ μ΄ ν΄λμ€λ€μ 곡ν΅μ μΈ νΉμ±μ μΆμΆν΄μ μ μΈν ν΄λμ€λ₯Ό μΆμ ν΄λμ€λΌ νλ€.
μΆμ ν΄λμ€μ μ€μ²΄ ν΄λμ€λ μμμ κ΄κ³λ₯Ό κ°μ§κ³ μλ€. μΆμ ν΄λμ€κ° λΆλͺ¨, μ€μ²΄ ν΄λμ€κ° μμμΌλ‘ ꡬνλμ΄ μ€μ²΄ ν΄λμ€λ μΆμ ν΄λμ€μ λͺ¨λ νΉμ±μ λ¬Όλ €λ°κ³ μΆκ°μ μΈ νΉμ±μ κ°μ§ μ μλ€.
- 곡ν΅λ νλμ λ©μλμ μ΄λ¦μ ν΅μΌν λͺ©μ
- μ€μ²΄ ν΄λμ€λ₯Ό μμ±ν λ μκ° μ μ½: 곡ν΅μ μΈ νΉμ±μ μΆμ ν΄λμ€μ μ μΈνκ³ λ€λ₯Έ μ λ§ μ€μ²΄ ν΄λμ€μ μ μΈνλ€.
1) μΆμ ν΄λμ€ μ μΈ
- new μ°μ°μλ₯Ό μ΄μ©ν΄μ κ°μ²΄λ₯Ό λ§λ€μ§ λͺ»νκ³ μμμ ν΅ν΄ μμ ν΄λμ€λ§ λ§λ€ μ μλ€.
- μΌλ° ν΄λμ€μ λμΌνκ² νλ, μμ±μ, λ©μλλ₯Ό μ μΈν μ μλ€.
- μμ κ°μ²΄κ° μμ±λ λ super()λ₯Ό νΈμΆν΄μ μΆμ ν΄λμ€ κ°μ²΄λ₯Ό μμ±νλ€.
public abstract class μΆμν΄λμ€ {
// νλ
// μμ±μ
// λ©μλ
}
2) μΆμ λ©μλμ μ¬μ μ
λ©μλμ μ μΈλ§ λμΌνκ³ μ€ν λ΄μ©μ μ€μ²΄ ν΄λμ€λ§λ€ λ¬λΌμΌ νλ κ²½μ°κ° μλ€. μ΄λ° κ²½μ°λ₯Ό μν΄μ μΆμ ν΄λμ€λ μΆμ λ©μλλ₯Ό μ μΈν μ μλ€. μΆμ λ©μλλ λ©μλμ μ μΈ λΆλ§ μκ³ μ€ν λ΄μ©μΈ μ€κ΄νΈκ° μλ λ©μλμ΄λ€.
[public | protected] abstract 리ν΄νμ
λ©μλμ΄λ¦(맀κ°λ³μ, ...);
- μΆμ ν΄λμ€ μ€κ³ μ νμ ν΄λμ€κ° λ°λμ μ€ν λ΄μ©μ μ±μ°λλ‘ κ°μ νκ³ μΆμ λ©μλκ° μμ κ²½μ° μ¬μ©νλ€.
- μμ ν΄λμ€λ λ°λμ μΆμ λ©μλλ₯Ό μ¬μ μν΄μ μ€ν λ΄μ©μ μμ±ν΄μΌ νλ€.
- μΆμ λ©μλλ₯Ό μ¬μ μνμ§ μμΌλ €λ©΄ μμ ν΄λμ€λ μΆμ ν΄λμ€κ° λμ΄μΌ νλ€.
2. μΈν°νμ΄μ€
μΈν°νμ΄μ€λ κ°μ²΄μ μ¬μ© λ°©λ²μ μ μν νμ μΌλ‘ λ€μν κ°μ²΄λ₯Ό λμΌν μ¬μ© λ°©λ²μΌλ‘ μ΄μ©ν μ μλ€.
μΈν°νμ΄μ€λ κ°λ° μ½λμ κ°μ²΄κ° μλ‘ ν΅μ νλ μ μ μν μ νλ€. κ°λ° μ½λκ° μΈν°νμ΄μ€μ λ©μλλ₯Ό νΈμΆνλ©΄ μΈν°νμ΄μ€λ κ°μ²΄μ λ©μλλ₯Ό νΈμΆμν¨λ€. κ·Έλ κΈ° λλ¬Έμ κ°λ° μ½λλ κ°μ²΄μ λ΄λΆ ꡬ쑰λ₯Ό μ νμκ° μκ³ μΈν°νμ΄μ€μ λ©μλλ§ μκ³ μμΌλ©΄ λλ€.
μ¬κΈ°μ μ κΉ κ°λ° μ½λκ° μ§μ κ°μ²΄μ λ©μλλ₯Ό νΈμΆνλ©΄ κ°λ¨νλ° μ μ€κ°μ μΈν°νμ΄μ€λ₯Ό λκΉ?
κ°λ° μ½λλ₯Ό μμ νμ§ μκ³ μ¬μ©νλ κ°μ²΄λ₯Ό λ³κ²½ν μ μλλ‘ νκΈ° μν΄μμ΄λ€. μΈν°νμ΄μ€λ μ¬λ¬ κ°μ²΄μμ μ¬μ©νλ―λ‘ κ°μ²΄μ λ°λΌ μ€ν λ΄μ©κ³Ό λ¦¬ν΄ κ°μ΄ λ¬λΌμ§λ€. λ°λΌμ κ°λ° μ½λ μΈ‘λ©΄μμλ μ½λ λ³κ²½ μμ΄ μ€ν λ΄μ©κ³Ό λ¦¬ν΄ κ°μ λ€μνν μ μλ€λ μ₯μ μ΄ μλ€.
1) μΈν°νμ΄μ€ μ μΈ
- κ°μ²΄ μ¬μ© λ°©λ²μ μ μν κ²μ΄λ―λ‘ μ€ν μ λ°μ΄ν°λ₯Ό μ μ₯ν μ μλ μΈμ€ν΄μ€ λλ μ μ νλλ₯Ό μ μΈν μ μλ€.
- κ°μ²΄λ‘ μμ±ν μ μκΈ° λλ¬Έμ μμ±μλ₯Ό κ°μ§ μ μλ€.
- μμ νλμ μΆμ λ©μλλ§μ κ΅¬μ± λ©€λ²λ‘ κ°μ§λ€.
- μμ νλ
- λͺ¨λ μΈν°νμ΄μ€μ νλλ public static final νΉμ±μ κ°κ³ μλ΅νλλΌλ μ»΄νμΌ κ³Όμ μμ μλμΌλ‘ λΆκ² λλ€.
- μΈν°νμ΄μ€ μμλ μ€ν μ κ°μ λ°κΏ μ μκ³ μ μΈκ³Ό λμμ μ΄κΈ°κ°μ λ°λμ μ§μ ν΄μΌ νλ€.
- μΆμ λ©μλ
- μΈν°νμ΄μ€ λ©μλλ μ€ν λΈλ‘μ΄ μλ μΆμ λ©μλλ‘ μ μΈνλ€.
- μΆμ λ©μλλ public abstract νΉμ±μ κ°κ³ μλ΅νλλΌλ μ»΄νμΌ κ³Όμ μμ μλμΌλ‘ λΆκ² λλ€.
- μμ νλ
[public] interface μΈν°νμ΄μ€ {
// μμ
[public static final] νμ
μμμ΄λ¦ = κ°;
// μΆμ λ©μλ
[public abstract] νμ
λ©μλμ΄λ¦(맀κ°λ³μ, ...);
}
2) μΈν°νμ΄μ€ ꡬν
κ°μ²΄λ μΈν°νμ΄μ€μμ μ μλ μΆμ λ©μλμ λμΌν μ€μ²΄ λ©μλλ₯Ό κ°κ³ μμ΄μΌ νλ€. μ΄λ¬ν κ°μ²΄λ₯Ό μΈν°νμ΄μ€μ ꡬν κ°μ²΄λΌκ³ νκ³ κ΅¬ν κ°μ²΄λ₯Ό μμ±νλ ν΄λμ€λ₯Ό ꡬν ν΄λμ€λΌ νλ€.
// ꡬν ν΄λμ€
public class ꡬνν΄λμ€ implements μΈν°νμ΄μ€ {
// μΈν°νμ΄μ€μ μ μΈλ μΆμ λ©μλμ μ€μ²΄ λ©μλ μ μΈ
}
// λ€μ€ μΈν°νμ΄μ€ ꡬν ν΄λμ€
public class ꡬνν΄λμ€ implements μΈν°νμ΄μ€1, μΈν°νμ΄μ€2 {
// μΈν°νμ΄μ€1μ μ μΈλ μΆμ λ©μλμ μ€μ²΄ λ©μλ μ μΈ
// μΈν°νμ΄μ€2μ μ μΈλ μΆμ λ©μλμ μ€μ²΄ λ©μλ μ μΈ
}
// ꡬν ν΄λμ€κ° μμ±λλ©΄ new μ°μ°μλ‘ κ°μ²΄λ₯Ό μμ±ν μ μλ€.
// κ·Έλ¬λ μΈν°νμ΄μ€λ₯Ό μ¬μ©ν κ²μ μλλ€.
ꡬνν΄λμ€ λ³μ = new ꡬνν΄λμ€();
3) μΈν°νμ΄μ€ μ¬μ©
μΈν°νμ΄μ€λ νλ, μμ±μ λλ λ©μλμ λ§€κ° λ³μ, μμ±μ λλ λ©μλμ λ‘컬 λ³μλ‘ μ μΈλ μ μλ€. μΈν°νμ΄μ€λ‘ ꡬν κ°μ²΄λ₯Ό μ¬μ©νλ €λ©΄ μΈν°νμ΄μ€ λ³μλ₯Ό μ μΈνκ³ κ΅¬ν κ°μ²΄λ₯Ό λμ ν΄μΌ νλ€. μΈν°νμ΄μ€ λ³μλ μ°Έμ‘° νμ μ΄κΈ° λλ¬Έμ ꡬν κ°μ²΄κ° λμ λ κ²½μ° κ΅¬ν κ°μ²΄μ λ²μ§λ₯Ό μ μ₯νλ€.
μΈν°νμ΄μ€ λ³μ;
λ³μ = ꡬνκ°μ²΄;
μΈν°νμ΄μ€ λ³μ = ꡬνκ°μ²΄;
ꡬν κ°μ²΄κ° μΈν°νμ΄μ€ νμ μ λμ λλ©΄ μΈν°νμ΄μ€μ μ μΈλ μΆμ λ©μλλ₯Ό κ°λ° μ½λμμ μ¬μ©ν μ μκ² λλ€. κ°λ° μ½λλ μΈν°νμ΄μ€μ μ μΈλ μΆμ λ©μλλ₯Ό νΈμΆνκ³ μΈν°νμ΄μ€λ ꡬν κ°μ²΄μ μ¬μ μ λ©μλλ₯Ό νΈμΆνλ€.
4) νμ λ³νκ³Ό λ€νμ±
λ€νμ±μ ꡬννκΈ° μν΄μλ λ©μλ μ¬μ μμ νμ λ³νμ΄ νμνλ€. μΈν°νμ΄μ€ μμ μ΄ λ κ°μ§ κΈ°λ₯μ΄ μ 곡λλ―λ‘ μμκ³Ό λλΆμ΄ λ€νμ±μ ꡬννλ λ° λ§μ΄ μ¬μ©λλ€. νλ‘κ·Έλ¨ μμ€ μ½λλ λ³ν¨μ΄ μλλ° κ΅¬ν κ°μ²΄λ₯Ό κ΅μ²΄ν¨μΌλ‘μ¨ νλ‘κ·Έλ¨μ μ€ν κ²°κ³Όκ° λ€μν΄μ§λ€. μ΄κ²μ΄ μΈν°νμ΄μ€μ λ€νμ±μ΄λ€.
μλ νμ λ³ν
ꡬν κ°μ²΄κ° μΈν°νμ΄μ€ νμ μΌλ‘ λ³νλλ κ²μ μλ νμ λ³νμ ν΄λΉλλ€. μΈν°νμ΄μ€ ꡬν ν΄λμ€λ₯Ό μμν΄μ μμ ν΄λμ€λ₯Ό λ§λ€μλ€λ©΄ μμ κ°μ²΄λ μλ νμ λ³νν μ μλ€.
κ°μ νμ λ³ν
ꡬν κ°μ²΄κ° μΈν°νμ΄μ€ νμ μΌλ‘ μλ νμ λ³ννλ©΄ μΈν°νμ΄μ€ λ©μλλ§ μ¬μ© κ°λ₯νλ€. κ²½μ°μ λ°λΌ ꡬν ν΄λμ€μ μ μΈλ νλμ λ©μλλ₯Ό μ¬μ©ν΄μΌ ν κ²½μ°λ μκΈΈ μ μλ€. κ°μ νμ λ³νμ ν΅ν΄ λ€μ ꡬν ν΄λμ€ νμ μΌλ‘ λ³νν ν ꡬν ν΄λμ€μ νλμ λ©μλλ₯Ό μ¬μ©ν μ μλ€.
if (vehicle instanceof Bus) {
Bus bus = (Bus)vehicle;
}