μμ
1. μμ
μμμ λΆλͺ¨κ° μμμκ² λ¬Όλ €μ£Όλ νμλ₯Ό λ§νλ€. μμμ μμμ ν΅ν΄μ λΆλͺ¨κ° λ¬Όλ €μ€ κ²μ μμ°μ€λ½κ² μ΄μ©ν μ μλ€.
- μ΄λ―Έ μ κ°λ°λ ν΄λμ€λ₯Ό μ¬μ¬μ©ν΄μ μλ‘μ΄ ν΄λμ€λ₯Ό λ§λ€κΈ° λλ¬Έμ μ€λ³΅λλ μ½λλ₯Ό μ€μ¬μ€λ€.
- λΆλͺ¨ ν΄λμ€μ μμ μΌλ‘ λͺ¨λ μμ ν΄λμ€λ€λ μμ λλ ν¨κ³Όλ₯Ό κ°μ Έμ€κΈ° λλ¬Έμ μ μ§ λ³΄μ μκ°μ μ΅μννλ€.
1) ν΄λμ€ μμ
μμ ν΄λμ€λ₯Ό μ μΈν λ μ΄λ€ λΆλͺ¨ ν΄λμ€λ₯Ό μμλ°μ κ²μΈμ§ λͺ μνλ€.
- μ¬λ¬ κ°μ λΆλͺ¨ ν΄λμ€λ₯Ό μμν μ μλ€.
- μ κ·Ό μ νμμ λ°λΌ μμ λμ νλμ λ©μλκ° λ¬λΌμ§λ€.
class μμν΄λμ€ extends λΆλͺ¨ν΄λμ€ {
// νλ
// μμ±μ
// λ©μλ
}
2) λΆλͺ¨ μμ±μ νΈμΆ
μμ κ°μ²΄λ₯Ό μμ±νλ©΄ λΆλͺ¨ κ°μ²΄κ° λ¨Όμ μμ±λκ³ κ·Έλ€μμ μμ κ°μ²΄κ° μμ±λλ€. λͺ¨λ κ°μ²΄λ ν΄λμ€μ μμ±μλ₯Ό νΈμΆνλλ° λΆλͺ¨ μμ±μλ μμ μμ±μμ 맨 첫 μ€μμ νΈμΆλλ€.
// 1. μμ μμ±μκ° λͺ
μμ μΌλ‘ μ μΈλμ§ μμλ€λ©΄
// μ»΄νμΌλ¬κ° μλμ κ°μ κΈ°λ³Έ μμ±μλ₯Ό μμ±νλ€.
public μμν΄λμ€() {
super(); // λΆλͺ¨ ν΄λμ€μ κΈ°λ³Έ μμ±μ νΈμΆ
}
// 2. μ§μ μμ μμ±μλ₯Ό μ μΈνκ³ λͺ
μμ μΌλ‘ λΆλͺ¨ μμ±μλ₯Ό νΈμΆνλ€λ©΄
public μμν΄λμ€(맀κ°λ³μ, ...) {
super(맀κ°λ³μ, ...); // μλ€λ©΄ μ»΄νμΌλ¬μ μν΄ λΆλͺ¨ ν΄λμ€μ κΈ°λ³Έ μμ±μ μλμΌλ‘ μΆκ°
}
3) λ©μλ μ¬μ μ(μ€λ²λΌμ΄λ©)
λΆλͺ¨ ν΄λμ€μ λͺ¨λ λ©μλκ° μμ ν΄λμ€μ λ§κ² μ€κ³λμ΄ μλ€λ©΄ κ°μ₯ μ΄μμ μΈ μμμ΄μ§λ§ μ΄λ€ λ©μλλ μμ ν΄λμ€κ° μ¬μ©νκΈ°μ μ ν©νμ§ μμ μ μλ€.
μ΄λ° κ²½μ° μμλ μΌλΆ λ©μλλ₯Ό μμ ν΄λμ€μμ μ¬μ μνμ¬ μμ νλ€. μ΄λ λΆλͺ¨ κ°μ²΄μ λ©μλλ μ¨κ²¨μ§κΈ° λλ¬Έμ μμ κ°μ²΄μμ λ©μλλ₯Ό νΈμΆνλ©΄ μ¬μ μλ μμ λ©μλλ§ νΈμΆλλ€. λ§μ½ λΆλͺ¨ λ©μλλ₯Ό μ¬μ©νκ³ μΆλ€λ©΄ super ν€μλ(super. λΆλͺ¨ λ©μλ())λ₯Ό ν΅ν΄ νΈμΆν μ μλ€.
- λΆλͺ¨ λ©μλμ λμΌν μκ·Έλμ²(λ¦¬ν΄ νμ , λ©μλ μ΄λ¦, λ§€κ° λ³μ λͺ©λ‘)λ₯Ό κ°μ ΈμΌ νλ€.
- μ κ·Ό μ νμ λ κ°νκ² μ μν μ μλ€.
- μλ‘μ΄ μμΈλ₯Ό throws ν μ μλ€.
- λ©μλ μμ @Override μ΄λ Έν μ΄μ μ λΆμ¬μ£Όλ©΄ μ»΄νμΌλ¬κ° μ νν μ¬μ μλ κ²μΈμ§ νμΈνμ¬ κ°λ°μμ μ€μλ₯Ό μ€μ¬μ€λ€.
4) final
final ν€μλλ ν΄λμ€, νλ, λ©μλλ₯Ό μ μΈν λ μ¬μ©νλλ° ν΄λΉ μ μΈμ΄ μ΅μ’ μνμ΄κ³ κ²°μ½ μμ λ μ μμμ λ»νλ€.
- ν΄λμ€: μμν μ μλ ν΄λμ€κ° λλ€. μ¦, μμ ν΄λμ€λ₯Ό λ§λ€ μ μλ€.
- λ©μλ: μ¬μ μν μ μλ λ©μλκ° λλ€. μ¦, μμ ν΄λμ€μμ μ¬μ μν μ μλ€.
- νλ: μ΄κΈ°κ° μ€μ ν λ μ΄μ κ°μ λ³κ²½ν μ μλ€.
2. νμ λ³νκ³Ό λ€νμ±
λ€νμ±μ μ¬μ© λ°©λ²μ λμΌνμ§λ§ λ€μν κ°μ²΄λ₯Ό μ΄μ©ν΄μ λ€μν μ€νκ²°κ³Όκ° λμ€λλ‘ νλ μ±μ§μ΄λ€. λ€νμ±μ ꡬννλ €λ©΄ λ©μλ μ¬μ μμ νμ λ³νμ΄ νμνλ€.
1) μλ νμ λ³ν
ν΄λμ€μ νμ λ³νμ μμ κ΄κ³μ μλ ν΄λμ€ μ¬μ΄μμ λ°μνλ€. μ¬κΈ°μ μλ νμ λ³νμ νλ‘κ·Έλ¨ μ€ν λμ€μ μλμ μΌλ‘ νμ λ³νμ΄ μΌμ΄λλ κ²μ λ§νλ€. μμμ λΆλͺ¨μ νΉμ§κ³Ό κΈ°λ₯μ μμλ°κΈ° λλ¬Έμ λΆλͺ¨μ λμΌνκ² μ·¨κΈλμ΄ λΆλͺ¨ νμ μΌλ‘ μλ νμ λ³νμ΄ κ°λ₯νλ€.
λΆλͺ¨νμ
λ³μ = μμνμ
;
// ex 1
Animal animal = new Cat();
// ex 2
Cat cat = new Cat();
Animal animal = cat;
λΆλͺ¨ νμ μΌλ‘ μλ νμ λ³νλ μ΄νμλ λΆλͺ¨ ν΄λμ€μ μ μΈλ νλμ λ©μλλ§ μ κ·Όμ΄ κ°λ₯νλ€. κ·Έλ¬λ λ©μλκ° μμ ν΄λμ€μμ μ¬μ μλμλ€λ©΄ μμ ν΄λμ€μ λ©μλκ° λμ νΈμΆλλ€.
2) νλμ λ€νμ±
νλμ νμ μ λΆλͺ¨ νμ μΌλ‘ μ μΈνλ©΄ λ€μν μμ κ°μ²΄λ€μ΄ μ μ₯λ μ μκΈ° λλ¬Έμ νλ μ¬μ© κ²°κ³Όκ° λ¬λΌμ§λ€. μ΄κ²μ΄ νλμ λ€νμ±μ΄λ€.
1. λΆλͺ¨ ν΄λμ€λ₯Ό μμνλ μμ ν΄λμ€λ λΆλͺ¨κ° κ°μ§κ³ μλ νλμ λ©μλλ₯Ό κ°μ§κ³ μμΌλ μ¬μ© λ°©λ²μ΄ λμΌνλ€.
2. μμ ν΄λμ€λ λΆλͺ¨μ λ©μλλ₯Ό μ¬μ μνμ¬ λ©μλμ μ€ν λ΄μ©μ λ³κ²½ν¨μΌλ‘μ¨ λ€λ₯Έ μ€νκ²°κ³Όλ₯Ό μ»μ μ μλ€.
3. μμ νμ μ λΆλͺ¨ νμ μΌλ‘ λ³νν μ μλ€.
μ΄ μΈ κ°μ§κ° λ€νμ±μ ꡬνν μ μλ κΈ°μ μ 쑰건μ΄λ€.
3) λ§€κ° λ³μμ λ€νμ±
μλ νμ λ³νμ νλμ κ°μ λμ ν λ λ°μνμ§λ§ μ£Όλ‘ λ©μλλ₯Ό νΈμΆν λ λ§μ΄ λ°μνλ€. λ©μλλ₯Ό νΈμΆν λμλ λ§€κ° λ³μμ νμ κ³Ό λμΌν λ§€κ° κ°μ μ§μ νλ κ²μ΄ μ μμ΄μ§λ§, λ§€κ° κ°μ λ€μννκΈ° μν΄ λ§€κ° λ³μμ μμ κ°μ²΄λ₯Ό μ§μ ν μλ μλ€.
class Driver {
void drive(Vehicle vehicle) // bus
{
vehicle.run();
}
}
λ§€κ° κ°μΌλ‘ μ΄λ€ μμ κ°μ²΄κ° μ 곡λλλμ λ°λΌ λ©μλμ μ€νκ²°κ³Όλ λ€μν΄μ§ μ μλ€.
4) κ°μ νμ λ³ν
κ°μ νμ λ³νμ λΆλͺ¨ νμ μ μμ νμ μΌλ‘ λ³ννλ κ²μ λ§νλ€. μμ νμ μ΄ λΆλͺ¨ νμ μΌλ‘ μλ νμ λ³νν ν λ€μ μμ νμ μΌλ‘ λ³νν λ κ°μ νμ λ³νμ μ¬μ©ν μ μλ€.
μμνμ
λ³μ = (μμνμ
)λΆλͺ¨νμ
;
λΆλͺ¨ νμ μΌλ‘ μλ νμ λ³νλλ©΄ λΆλͺ¨μ μ μΈλ νλμ λ©μλλ§ μ¬μ© κ°λ₯νκΈ° λλ¬Έμ μμμ μ μΈλ νλμ λ©μλλ₯Ό κΌ μ¬μ©ν΄μΌ νλ€λ©΄ κ°μ νμ λ³νμΌλ‘ λ€μ μμ νμ μΌλ‘ λ³νν ν μ¬μ©νλ€.
λ§μ½ μ²μλΆν° λΆλͺ¨ νμ μΌλ‘ μμ±λ κ°μ²΄κ° μλ€λ©΄ κ°μ νμ λ³νμ μ¬μ©ν μ μλ€.
κ·Έλ λ€λ©΄ μ΄λ»κ² μ°Έμ‘°νλ κ°μ²΄λ₯Ό μ μ μμκΉ?
μ΄λ€ κ°μ²΄κ° μ΄λ€ ν΄λμ€μ μΈμ€ν΄μ€μΈμ§ νμΈνκΈ° μν΄ instanceof μ°μ°μλ₯Ό μ¬μ©νλ€. instanceof μ°μ°μλ‘ μ΄λ€ κ°μ²΄μΈμ§ νμΈν ν μμ νκ² κ°μ νμ λ³νμ ν΄μΌ νλ€.
// λ§λ€λ©΄ true μλλΌλ©΄ false
boolean result = μ’ν(κ°μ²΄) instanceof μ°ν(νμ
)