# λ€νμ±(polymorphism)
written by sohyeon, hyemin π‘
# 1. λ€νμ±μ΄λ
κ°μ²΄μ§ν₯κ°λ
μμ λ€νμ±μ΄λ μ¬λ¬ κ°μ§ ννλ₯Ό κ°μ§ μ μλ λ₯λ ₯
μ μλ―Ένλ€.
μλ°μμ μ‘°μν΄λμ€ νμ μ μ°Έμ‘°λ³μλ‘ μμν΄λμ€μ μΈμ€ν΄μ€λ₯Ό μ°Έμ‘°ν μ μλλ‘ νμλ€.
CaptionTV c = new CaptionTV();
TV t = new CaptionTV();
CaptionTV μΈμ€ν΄μ€ 2κ°λ₯Ό μμ±νκ³ , μ°Έμ‘°λ³μ cμ tκ° μμ±λ μΈμ€ν΄μ€λ₯Ό νλμ© μ°Έμ‘°νλλ‘ νλ€.
μ€μ μΈμ€ν΄μ€κ° CaptionTV νμ μ΄λΌ ν μ§λΌλ, μ°Έμ‘°λ³μ tλ‘λ CaptionTV μΈμ€ν΄μ€μ λͺ¨λ λ©€λ²λ₯Ό μ¬μ©ν μ μλ€.
λ λ€ κ°μ νμ
μ μΈμ€ν΄μ€μ§λ§ μ°Έμ‘°λ³μμ νμ
μ λ°λΌ μ¬μ©ν μ μλ λ©€λ²μ κ°μκ° λ¬λΌμ§λ€.
# μ΄μ²λΌ μ‘°μνμ μ μ°Έμ‘°λ³μλ‘ μμνμ μ μΈμ€ν΄μ€λ₯Ό μ°Έμ‘°ν μ μμ§λ§, μμνμ μ μ°Έμ‘°λ³μλ‘ μ‘°μνμ μ μΈμ€ν΄μ€λ₯Ό μ°Έμ‘°ν μ μλ€.
# 2. μ°Έμ‘°λ³μμ νλ³ν
κΈ°λ³Έν λ³μμ κ°μ΄ μ°Έμ‘°λ³μλ νλ³νμ΄ κ°λ₯νλ€. λ¨, μλ‘ μμκ΄κ³μ μλ ν΄λμ€
μ¬μ΄μμλ§ κ°λ₯νλ€.
μμνμ
-> μ‘°μνμ
(Up-casting) : νλ³ν μλ΅κ°λ₯. // μμνμ
μ μ°Έμ‘°λ³μλ₯Ό μ‘°μνμ
μ μ°Έμ‘°λ³μλ‘ λ³ννλ κ²
μμνμ
<- μ‘°μνμ
(Down-casting) : νλ³ν μλ΅λΆκ° // μ‘°μνμ
μ μ°Έμ‘°λ³μλ₯Ό μμνμ
μ μ°Έμ‘°λ³μλ‘ λ³ννλ κ²
νλ³νμ
μ°Έμ‘°λ³μμ νμ μ λ³ν
νλ κ²μ΄μ§μΈμ€ν΄μ€λ₯Ό λ³ν
νλ κ²μ μλκΈ° λλ¬Έμμ°Έμ‘°λ³μμ νλ³νμ μΈμ€ν΄μ€μ μλ¬΄λ° μν₯μ λ―ΈμΉμ§ μλλ€.
λ¨μ§ μ°Έμ‘°λ³μμ νλ³νμ ν΅ν΄μ, μ°Έμ‘°νκ³ μλ μΈμ€ν΄μ€μμ μ¬μ©ν μ μλ λ©€λ²μ λ²μ(κ°μ)λ₯Ό μ‘°μ νλ κ²μ΄λ€.
# ex) μμ
class CastingTest1 {
public static void main(String args[]) {
Car car = null; // Carνμ
μ μ°Έμ‘°λ³μ carλ₯Ό μ μΈνκ³ nullλ‘ μ΄κΈ°ννλ€.
FireEngine fe = new FireEngine(); // FireEngine μΈμ€ν΄μ€λ₯Ό μμ±νκ³ FireEngine νμ
μ μ°Έμ‘°λ³μκ° μ°Έμ‘°νλλ‘ νλ€.
FireEngine fe2 = null;
fe.water();
car = fe; // car = (Car)fe;μμ νλ³νμ΄ μλ΅λ ννλ€. feκ° μ°Έμ‘°νκ³ μλ μΈμ€ν΄μ€μ μ£Όμκ° carμ μ μ₯λλ€.
fe2 = (FireEngine)car; // μμνμ
<- μ‘°μνμ
, carμλ FireEngineμΈμ€ν΄μ€μ μ£Όμκ° μ μ₯λμ΄ μμΌλ―λ‘ fe2μλ FireEngineμΈμ€ν΄μ€μ μ£Όμκ° μ μ₯λλ€. carμλ λ¬λ¦¬, fe2λ FireEngineνμ
μ΄λ―λ‘ FireEngineμΈμ€ν΄μ€μ λͺ¨λ λ©€λ²λ€μ μ¬μ©ν μ μλ€.
fe2.water();
}
}
class Car {
String color;
int door;
void drive() {
System.out.println("drive, Brrrr~");
}
void stop() {
System.out.println("stop!!!");
}
}
class FireEngine extends Car {
void water() {
System.out.println("water!!!");
}
}
# μ€νκ²°κ³Ό
water!!!
water!!!
# ex) μμ
class CastingTest2 {
public static void main(String args[]) {
Car car = new Car();
Car car2 = null;
FireEngine fe = null;
car.drive();
fe = (FireEngine) car; // μ»΄νμΌμ κ°λ₯νμ§λ§ μ€ν μ μλ¬κ° λ°μνλ€.
fe.drive();
car2 = fe;
car2.drive();
}
}
# μ€νκ²°κ³Ό
drive, Brrrr~
java.lang.ClassCastException: Car
at CastingTest2.main(CastingTest2.java:8)
μλ‘ μμκ΄κ³μ μλ νμ
κ°μ νλ³νμ μλ°©ν₯μΌλ‘ μμ λ‘κ² μνλ μ μμΌλ, μ°Έμ‘°λ³μκ° κ°λ¦¬ν€λ μΈμ€ν΄μ€μ μμνμ
μΌλ‘ νλ³νμ νμ©λμ§ μλλ€.
κ·Έλμ μ°Έμ‘°λ³μκ° κ°λ¦¬ν€λ μΈμ€ν΄μ€μ νμ
μ΄ λ¬΄μμΈμ§ νμΈνλ κ²μ΄ μ€μνλ€.