π λ©ν λμ΄ λ€νμ±μ 무μμΈμ§, μ μ¬μ©νλμ§μ λν΄μ λ¬Όμ΄λ³΄μ ¨λλ° λ¨Έλ¦ΏμμΌλ‘λ λμ§ κ·Έλ €μ§λλ° λ§μ λλ΅μ νλ €λ λ΄κ° μλ λ΄μ©μ΄ λ§λμ§ μμ¬μ΄ λ€μκ³ , νμ¬ μκ³ μλ λ΄μ©λ μ΄λ»κ² μ€λͺ ν΄μΌνλμ§ λ§λ¬Έμ΄ ν± λ§νλ€. μκ³ μλ€κ³ μκ°νμ§λ§ λλ΅μ λͺ»νλ,,^^ μλ°μμ 맀μ°λ§€μ° μ€μν OOP(κ°μ²΄μ§ν₯μΈμ΄)μ νΉμ§ μ€ νλμΈ λ€νμ±μ λν΄μ μμ보λλ‘ νμ!
λ€νμ±(polymorphism)μ΄λ?
κ°μ²΄μ§ν₯κ°λ
μ μ€μν νΉμ§ μ€μ νλμΈ λ€νμ±μ 'νλμ κ°μ²΄κ° μ¬λ¬ κ°μ§ νμ
μ κ°μ§ μ μλ κ²'μ μλ―Ένλ€. μλ°μμλ ν νμ
μ μ°Έμ‘°λ³μλ‘ μ¬λ¬ νμ
μ κ°μ²΄λ₯Ό μ°Έμ‘°ν μ μλλ‘ ν¨μΌλ‘μ¨ λ€νμ±μ νλ‘κ·Έλ¨μ μΌλ‘ ꡬννλ€.
λ€νμ±μ μμ, μΆμνμ λλΆμ΄ κ°μ²΄ μ§ν₯ νλ‘κ·Έλλ°μ ꡬμ±νλ μ€μν νΉμ§ μ€ νλλ€.
λ€νμ±μ λνμ μΈ μλ‘λ μ€λ²λ‘λ©, μ€λ²λΌμ΄λ©μ΄ μλ€. μ€λ²λ‘λ©κ³Ό μ€λ²λΌμ΄λ©μ λν΄ μ 리ν λ΄μ©λ μλ€. κΆκΈνλ€λ©΄ μλμ κ²μκΈμ 보길 λ°λλ€.
μ½λλ₯Ό 보면μ λ€νμ±μ μ΄ν΄ν΄λ³΄μ
// λΆλͺ¨ν΄λμ€
public class Parent {
void dowork() { System.out.println("λΆλͺ¨ ν΄λμ€μ dowork() λ©μλμ
λλ€."); }
}
// μμν΄λμ€
public class Child extends Parent {
void dowork() {
System.out.println("μμ ν΄λμ€μ dowork() λ©μλμ
λλ€.");
}
}
// μμ ν΄λμ€
public class Polymorphism {
// λ€νμ±
Parent parent = new Parent(); //(1)
Child child = new Child(); //(2)
Parent downCasting = (Parent) new Child(); //(3)
Child childParent = new Parent(); //(4) -μ€λ₯λ°μ
}
- λΆλͺ¨ν΄λμ€μΈ Parnetλ₯Ό μμ±νλ€.
- μμν΄λμ€μΈ Childλ₯Ό μμ±νκ³ Parentλ₯Ό μμλ°λλ€.
- Polymorphismν΄λμ€λ₯Ό μμ±νκ³ λΆλͺ¨ν΄λμ€μ μμν΄λμ€ λͺ¨λ κ°μ²΄λ₯Ό μμ±νλ€.
- (1),(2)μ κ°μ΄ κ°μ νμ μ μΈμ€ν΄μ€λ₯Ό μ°Έμ‘°ν μ μλ€.
- (3)κ³Ό κ°μ΄ λΆλͺ¨ν΄λμ€ νμ μ μ°Έμ‘°λ³μλ‘λ μμν΄λμ€ νμ μ μΈμ€ν΄μ€λ₯Ό μ°Έμ‘°ν μ μλ€.
- (4)μ κ°μ΄ μμν΄λμ€ νμ μ μ°Έμ‘°λ³μλ‘ λΆλͺ¨ν΄λμ€ νμ μ μΈμ€ν΄μ€λ₯Ό μ°Έμ‘°ν μ μλ€.
(1),(2) κ° κ°λ₯ν μ΄μ
μ°Έμ‘° λ³μκ° μ¬μ©ν μ μλ λ©€λ²μ κ°μκ° μ€μ μΈμ€ν΄μ€μ λ©€λ² κ°μμ κ°κΈ° λλ¬Έ
(3)μ΄ κ°λ₯ν μ΄μ
μ°Έμ‘° λ³μκ° μ¬μ©ν μ μλ λ©€λ²μ κ°μκ° μ€μ μΈμ€ν΄μ€μ λ©€λ² κ°μλ³΄λ€ μ κΈ° λλ¬Έ
(4)κ° μ°Έμ‘°ν μ μλ μ΄μ
μ°Έμ‘° λ³μκ° μ¬μ©ν μ μλ λ©€λ²μ κ°μκ° μ€μ μΈμ€ν΄μ€μ λ©€λ² κ°μλ³΄λ€ λ§κΈ° λλ¬Έ
μ¦, ν΄λμ€λ μμμ ν΅ν΄ νμ₯λ μλ μμ΄λ μΆμλ μλ μμΌλ―λ‘, μμν΄λμ€μμ μ¬μ©ν μ μλ λ©€λ²μ κ°μκ° μΈμ λ λΆλͺ¨ν΄λμ€μ κ°κ±°λ λ§κΈ° λλ¬Έμ μμ->λΆλͺ¨λ₯Ό μ°Έμ‘°ν μ μλ€.
μ°Έμ‘°λ³μμ νλ³ν
κΈ°λ³Έν λ³μμ κ°μ΄ μ°Έμ‘°λ³μλ νλ³νμ΄ κ°λ₯νλ€. λ¨, μλ‘ μμκ΄κ³μ μλ ν΄λμ€ μ¬μ΄μμλ§ κ°λ₯νκΈ° λλ¬Έμ μλμ λ°μ€μ²λΌλ§ νλ³νμ΄ κ°λ₯νλ€.
μμν΄λμ€ -> λΆλͺ¨ν΄λμ€ (UpCasting) : νλ³ν μλ΅κ°λ₯
λΆλͺ¨ν΄λμ€ -> μμν΄λμ€ (DownCasting) : νλ³ν μλ΅λΆκ°
μ°Έμ‘°λ³μλ₯Ό μμ->λΆλͺ¨ν΄λμ€λ‘ νλ³ννλ κ²μ UpCasting(μ μΊμ€ν )μ΄λΌκ³ νλ©°, λΆλͺ¨->μμν΄λμ€λ‘ νλ³ννλ κ²μ DownCasting(λ€μ΄μΊμ€ν )μ΄λΌκ³ νλ€.
κ·Έλ λ€λ©΄ νλ³νμ νλ λ°©λ²μ μ΄λ»κ² λ κΉ? μλμ μ½λλ₯Ό 보μ
// λΆλͺ¨ν΄λμ€
public class Car {
String color;
int seat;
void drive() { // μ΄μ κΈ°λ₯
System.out.println("drive");
}
void stop() { // λ©μΆκΈ°
System.out.println("stop!!!");
}
}
// μμν΄λμ€
public class Sorento extends Car{
void sunroof() {
System.out.println("sunroof open~!");
}
}
// μ€νν΄λμ€
public class Casting {
public static void main(String[] args) {
Car car = null;
Sorento sorento = new Sorento();
Sorento sorento2 = null;
sorento.drive();
sorento.sunroof();
car = sorento; //μ
μΊμ€ν
(μλ΅λμ΄μμ) μμν΄λμ€->λΆλͺ¨ν΄λμ€
sorento2 = (Sorento)car; // λ€μ΄μΊμ€ν
λΆλͺ¨ν΄λμ€->μμν΄λμ€
sorento2.sunroof();
}
}
μ€νκ²°κ³Ό
drive
sunroof open~!
sunroof open~!
instanceof μ°μ°μ
μ΄λ¬ν λ€νμ±μΌλ‘ μΈν΄ μ°Έμ‘°λ³μκ° μ€μ λ‘ μ°Έμ‘°νκ³ μλ μΈμ€ν΄μ€μ νμ μ νμΈν νμμ±μ΄ μκΈ΄λ€. μλ°μμλ instanceofμ°μ°μλ₯Ό μ¬μ©νλ€. μ°μ°κ²°κ³Όλ‘λ booleanκ°μΈ true, falseλ₯Ό λ°ννλ©° trueλ₯Ό λ°ννλ€λ©΄ μ°Έμ‘°λ³μκ° κ²μ¬ν νμ μΌλ‘ νλ³νμ΄ κ°λ₯νλ€λ κ²μ λ»νλ€.
μ°Έμ‘°λ³μ instanceof ν΄λμ€μ΄λ¦
μμ
// λΆλͺ¨ν΄λμ€
public class Car {//λ΄μ©μλ΅}
// μμν΄λμ€
public class Sorento extends Car{//λ΄μ©μλ΅}
// μ€νν΄λμ€
public class instanceofTest {
public static void main(String[] args) {
if(c instanceof Sorento) {
System.out.println("This is a Sorento instance");
}
if(c instanceof Car) {
System.out.println("This is a Car instance");
}
System.out.println(c.getClass().getName()); // ν΄λμ€μ μ΄λ¦ μΆλ ₯
}
μ€νκ²°κ³Ό
This is a Sorento instance
This is a Car instance
polymorphism.Sorento
μμ μ½λμ²λΌ instanceof μ°μ°μλ₯Ό μ¬μ©νλ©΄ μΈμ€ν΄μ€μ μ€μ νμ μ μ μ μλ€.
μ΄λ€ νμ μ λν instanceof μ°μ°μ κ²°κ³Όκ° trueλΌλ κ²μ κ²μ¬ν νμ μΌλ‘ νλ³νμ΄ κ°λ₯νλ€λ κ²μ λ»νλ€.
μ°Έκ³ μ¬μ΄νΈ
http://tcpschool.com/java/java_polymorphism_concept
μλ°μ μ
μλ°μ μ μ
'Language > Java' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
[Java]μΆμν΄λμ€μ μΈν°νμ΄μ€(μ°¨μ΄,곡ν΅μ ) (0) | 2021.08.21 |
---|---|
[Java] JAVA 8 νΉμ§ (0) | 2021.08.18 |
[Java] μμ(Inheritance)μ λν΄μ (0) | 2021.08.14 |
[Java] μ€λ²λΌμ΄λ©(Overriding)κ³Ό μ€λ²λ‘λ©(Overloading)μ μ°¨μ΄μ (0) | 2021.08.11 |
[Java] λ³μ(Variable)μ μλ£ν(Data type) (0) | 2021.07.18 |
λκΈ