Java | λ€νμ±(Polymorphism)
- -
κ°μ²΄μ§ν₯ ν¨λ¬λ€μμ 4κ°μ§ μ£Όμ νΉμ±
μΊ‘μν
μΆμν
λ€νμ±
μμ
κ·Έ μ€μ λ€νμ±μ λν΄μ λ°°μ λλ°,
μ¬μ€ μ λλ‘ μ΄ν΄νμ§ μκ³ μ νκ³ λμ΄κ°λ€.
κ·Έλ¦¬κ³ λ€μ κΈ°λ‘μΌλ‘ λ¨κΈ°κ³ μ λ€μ λ³΄κ³ μλλ°,
κ·Έλλ μ΄ν΄κ° λμ§ μμλ€.
μ ν¬λΈλ‘ ν΄λΉ κ΄λ ¨ν μμμ μ°Ύμ보면μ μ΄ν΄νλλ°,
λ Έλ§λ μ½λ μ±λμμ μ λ‘λν 'κ°λ°μ μ 곡νμ? κ°μ²΄μ§ν₯ κ°λ μ 리 10λΆμ»·' μμμΌλ‘ κ°νΌλ₯Ό μ‘μ μ μμλ€.
λ무 μ μ΅ν μμμ΄λ μΆμ²νλ€.
[μμμΆμ² : κ°λ°μ μ 곡νμ? κ°μ²΄μ§ν₯ κ°λ μ 리 10λΆμ»·]
κ·ΈλΌ..
[μΆμ² : μ ν ν¬ μλ°]
λ€νμ±(Polymorphism)
μ¬λ¬ ννλ₯Ό λ°μλ€μΌ μ μλ μ±μ§, μν©μ λ°λΌ μλ―Έλ₯Ό λ€λ₯΄κ² λΆμ¬ν μ μλ νΉμ± λ± νλμ νμ μ μ¬λ¬ κ°μ²΄λ₯Ό λμ ν μ μλ μ±μ§.
λ€νμ± μμ
Bouncer(κ²½λΉμ) ν΄λμ€λ₯Ό μΆκ°νλ€.
interface Predator6 {
(μλ΅)
}
class Animal6 {
(μλ΅)
}
class Tiger6 extends Animal6 implements Predator6, Barkable6 {
(μλ΅)
}
class Lion6 extends Animal6 implements Predator6, Barkable6 {
(μλ΅)
}
class ZooKeeper6 {
(μλ΅)
}
class Bouncer6 {
void barkAnimal6(Animal6 animal6) {
if(animal6 instanceof Tiger6) {
System.out.println("μ΄ν₯");
} else if(animal6 instanceof Lion6) {
System.out.println("μΌλ₯΄λ ");
}
}
}
public class A6_Polymorphism {
public staticvoid main(String[] args) {
Tiger6 tiger = new Tiger6();
Lion6 lion = new Lion6();
// λ€ν₯μ±
// μμ 1
Bouncer6 bouncer6 = new Bouncer6();
bouncer6.barkAnimal6(tiger);
bouncer6.barkAnimal6(lion);
}
}
κ²½λΉμ ν΄λμ€λ λλ¬Όμ μ§κ²νμ¬(barkAnimal) 건물μ μ§ν€λ μν μ μ μνλ€.
barkAnimal λ©μλλ μ λ ₯μΌλ‘ λ°μ animal κ°μ²΄κ° Tigerμ κ°μ²΄μΈ κ²½μ°μλ "μ΄ν₯" μ μΆλ ₯νκ³ Lion κ°μ²΄μΈ κ²½μ°μλ "μΌλ₯΄λ "μ μΆλ ₯νλ€.
instanceof λ μ΄λ€ κ°μ²΄κ° νΉμ ν΄λμ€μ κ°μ²΄μΈμ§ μ‘°μ¬ν λ μ¬μ©νλ€.
'animal instanceof Tiger λ animal κ°μ²΄λ Tiger ν΄λμ€λ‘ λ§λ€μ΄μ§ κ°μ²΄μΈκ°?' λ₯Ό 묻λ 쑰건문
class Bouncer {
void barkAnimal(Animal animal) {
if (animal instanceof Tiger) {
System.out.println("μ΄ν₯");
} else if (animal instanceof Lion) {
System.out.println("μΌλ₯΄λ ");
} else if (animal instanceof Crocodile) {
System.out.println("μ©μ©");
} else if (animal instanceof Leopard) {
System.out.println("μΊ¬μΉ");
}
}
}
λ§μ½ μ‘μλλ¬Όμ΄ λμ΄λ κ²½μ° μμ μ½λμ²λΌ μ‘μλλ¬Όλ§λ€ μ§λ λ©μλλ₯Ό μΆκ°ν΄μΌνλ λ²κ±°λ‘μμ΄ μκΈ΄λ€.
μ΄λ° κ²½μ°μμλ μμ μΈν°νμ΄μ€λ₯Ό λ°°μ΄ λ΄μ©μ μ°Έκ³ νμ¬ ν΄λ²μ μ°Ύμ μ μλ€.
// λ€νμ± μΈν°νμ΄μ€ μμ±
interface Barkable6 {
void bark6();
}
class Animal6 {
(μλ΅)
}
class Tiger6 extends Animal6 implements Predator6, Barkable6 { // μΈν°νμ΄μ€ μμ
// μ½€λ§(,)λ₯Ό μ΄μ©νμ¬ μ¬λ¬κ°λ₯Ό implements ν μ μλ€.
public String getFood6() {
return "apple";
}
public void bark6() { // λλ¬Όμ μ’
λ₯μ λ°λ₯Έ μ리 λ©μλ μΆκ°
System.out.println("μ΄ν₯");
}
}
class Lion6 extends Animal6 implements Predator6, Barkable6 {
public String getFood6() {
return "banana";
}
public void bark6() {
System.out.println("μΌλ₯΄λ ");
}
}
class ZooKeeper6 {
(μλ΅)
}
class Bouncer6 {
void barkAnimal6(Barkable6 animal6) { // Animal λμ Barkable6μ μ¬μ©
animal6.bark6();
}
}
μ‘μλλ¬Όμ ν΄λμ€ λ€μ μΈν°νμ΄μ€λ₯Ό ( , ) λ₯Ό μ¬μ©ν¨μΌλ‘ μ°λ¬μ μΆκ°κ° κ°λ₯νλ€.
Barkable μΈν°νμ΄μ€μ λ§μΆ° μ‘μλλ¬Όμ bark() λ©μλλ₯Ό ꡬννκ³ , λλ¬Όμ νΉμ±μ λ§κ² μ§λ μ리λ₯Ό μ μν΄μ€λ€.
μ΄λ‘μ¨ λ³΅μ‘νλ 쑰건λΆκΈ°λ¬Έλ μ¬λΌμ§κ³ 보기 νΈν μ½λκ° μμ±λμλ€.
μ 리
λ€νμ±μ νλμ νμ μ μ¬λ¬ κ°μ²΄λ₯Ό λμ ν μ μλ μ±μ§μ΄κ³ , μ΄κ±Έμ ꡬννκΈ° μν΄μλ μ¬λ¬ κ°μ²΄λ€ μ€ κ³΅ν΅ νΉμ±μΌλ‘ νμ μ μΆμννκ³ κ·Έκ²μ μμ(μΈν°νμ΄μ€λΌλ©΄ ꡬν)ν΄μΌνλ€.
μ¬μ€ μ΄λ²μ λ°°μ°λ κ³Όμ μ μ΄λ€ μΈμ΄μμλ μ§ μ€μ¬μ©λκ³ μκ³ , ꡬ쑰μ νΉμ±μ μμλλ€λ©΄ μ΄ν΄νλλ° ν¬κ² λμμ λ°μ μ μλ€κ³ νλ€.
κ·Έλ§νΌ κ°μ²΄μ§ν₯μμ κ°μ₯ μ€μν λΆλΆμ΄κ³ , μ¬λ¬λ² 보면μ μμ μ κ²μΌλ‘ λ§λ€μ΄μΌνλ λΆλΆμ΄λ€.
μ΄λ²μ λ€νμ±μ λ°°μ°κ² λλ©΄μ μ΄ν΄λ₯Ό λκΈ° μν΄ μ ν¬λΈ μμλ μ°Ύμλ³΄κ³ λ€λ₯Έ λΈλ‘κ·Έμ κΈλ μ°Ύμλ³΄κ³ νλ κ³Όμ μ΄ κ°μ¬νλ€.
κ΄λ ¨ μκ³ λ¦¬μ¦μ ν΅ν΄ μ μ΅ν μ 보λ₯Ό μ»μ μ μμκ³ , μμΌλ‘λ κ³μ μ΄λ° μμΌλ‘ μ€μ€λ‘ μ°Ύμ 곡λΆν΄ λμκ°λ κ³Όμ μ λ°λλ‘ νμ.
μ€κ³΅μ!
'π» κ³΅λΆ κΈ°λ‘ > β Java' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
Java | κ°μ²΄μ§ν₯ νλ‘κ·Έλλ° μ°μ΅ λ¬Έμ λ° νμ΄ (0) | 2023.01.06 |
---|---|
Java | μΆμ ν΄λμ€(Abstract Class) (0) | 2023.01.06 |
Java | μΈν°νμ΄μ€(Interface) (0) | 2023.01.06 |
Java | μμ±μ(Constructor) (0) | 2023.01.06 |
Java | μμ(Inheritance) (0) | 2023.01.06 |
μμ€ν κ³΅κ° κ°μ¬ν©λλ€