λ€νμ±(Polymorphism)
π λ€νμ±
λ€νμ±μ΄λ?
-
μ¬λ¬ κ°μ§ ννλ₯Ό κ°μ§ μ μλ λ₯λ ₯.
-
νλμ μ°Έμ‘°λ³μλ‘ μ¬λ¬ νμ μ κ°μ²΄λ₯Ό μ°Έμ‘°ν μ μλ κ².
μ¦, μ‘°μνμ μ μ°Έμ‘°λ³μλ‘ μμνμ μ κ°μ²΄λ₯Ό λ€λ£° μ μλ κ²μ΄ λ€νμ±μ΄λ€.
1
2
3
4
5
6
7
8
9
10
11
12
class Tv {
boolean power;
int channel;
void method1() {}
}
class CaptionTv extends Tv {
String text;
void caption() {}
}
1
2
3
4
CaptionTv C = new CaptionTv();
// μ‘°μν΄λμ€μ μ°Έμ‘°λ³μλ‘ μμνμ
μ κ°μ²΄λ₯Ό μμ±
Tv t = new CaptionTv();
λ°λλ‘ μμνμ μ μ°Έμ‘°λ³μλ‘ μ‘°μνμ μ μΈμ€ν΄μ€λ₯Ό μ°Έμ‘°ν μλ μλ€.
π μ°Έμ‘° λ³μμ νλ³ν
π₯ μ°Έμ‘° λ³μμ νλ³νμ μ ν κΉ? π₯
β μ°Έμ‘°λ³μ(리λͺ¨μ½)μ λ³κ²½ν¨μΌλ‘μ¨ μ¬μ©ν μ μλ λ©€λ²μ κ°―μλ₯Ό μ‘°μ νκΈ° μν΄
-
μλ‘ μμκ΄κ³μ μλ νμ κ°μ νλ³νλ§ κ°λ₯νλ€.
-
μμνμ μμ μ‘°μνμ μΌλ‘ νλ³ν νλ κ²½μ°, ν λ³ν μλ΅κ°λ₯
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
class Car {
String color;
int door;
void drive() {
System.out.println("λΆλ¦λΆλ¦");
}
}
class SportsCar {
String price;
void SportsMode() {
Sytem.out.println("μ€ν¬μΈ λͺ¨λ ON");
}
}
public static void main(Strin[] args) {
Car car = null;
SportsCar sc = new SportsCar();
SportsCar sc2 = null;
sc.SportsMode();
car = (Car)sc
/*
<μμ β μ‘°μ> νλ³ν
(Car)μλ΅ κ°λ₯
car.SportsMode(); μλ¬λ°μ
*/
sc2 = (SprotsCar)car; // <μ‘°μ β μμ> νλ³ν
sc2.SportsMode();
}
π instanceof μ°μ°μ
π₯ μ°Έμ‘° λ³μμ νλ³νμ μ ν κΉ? π₯
β μ°Έμ‘°λ³μλ₯Ό νλ³ννκΈ° μ μ κ°λ₯μ¬λΆλ₯Ό νμΈν λ
-
μ°Έμ‘°λ³μμ νλ³ν κ°λ₯μ¬λΆ νμΈμ μ¬μ©. κ°λ₯νλ©΄ trueλ₯Ό λ°ννλ€.
-
νλ³ν μ μ λ°λμ
instanceofλ©μλλ‘ νμΈν΄μΌ νλ€.
1
2
3
4
5
6
void myCar(Car c) {
if (c instanceof SportsCar) {
SportsCar sc = new SportsCar();
sc.SportsMode();
}
}
π λ§€κ°λ³μμ λ€νμ±
μ°Έμ‘°ν λ§€κ°λ³μλ λ©μλ νΈμΆμ,
μμ κ³Ό κ°μ νμ λλ μμνμ μ μΈμ€ν΄μ€λ₯Ό λκ²¨μ€ μ μλ€.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
/* Product ν΄λμ€ */
class Product {
int price; // μ νκ°κ²©
int bonusPoint; // μ νꡬ맀 μ μ 곡νλ 보λμ€ μ μ
Product(int price) {
this.price = price;
bonusPoint = (int)(price/10.0); // 보λμ€ μ μλ μ νκ°κ²©μ 10%
}
}
/* Tv1 ν΄λμ€ */
class Tv1 extends Product {
Tv1() {
// μ‘°μν΄λμ€μ μμ±μ product(int price)λ₯Ό νΈμΆνλ€
super(100); // TVκ°κ²©μ 100λ§μμΌλ‘ νλ€.
}
// Objectν΄λμ€ toString()μ μ€λ²λΌμ΄λ©νλ€.
public String toString() { return "Tv"; }
}
/* Computer ν΄λμ€ */
class Computer extends Product {
Computer() { super(200); }
public String toString() { return "Computer"; }
}
/* Buyer ν΄λμ€ */
class Buyer { // κ³ κ°, 물건μ μ¬λμ¬λ
int money = 1000; // μμ κΈμ‘
int bonusPoint = 0; // 보λμ€ ν¬μΈνΈ
// buy λ©μλμ λ§€κ°λ³μλ‘, Productνμ
μ μ°Έμ‘°λ³μ p μ μΈ
void buy(Product p) {
if(money < p.price) {
System.out.println("μμ‘μ΄ λΆμ‘±νμ¬ λ¬Όκ±΄μ μ΄ μ μμ΅λλ€.");
return;
}
money -= p.price; // - ꡬμ
ν κ°κ²©
bonusPoint += p.bonusPoint; // + 보λμ€ ν¬μΈνΈ
System.out.println(p + "μ ꡬμ
νμ
¨μ΅λλ€.");
}
}
class Ex7_8 {
public static void main(String args[]) {
Buyer b = new Buyer();
b.buy(new Tv1()); // buy(Product p)
b.buy(new Computer()); // buy(Product p)
System.out.println("νμ¬ λ¨μ λμ" + b.money + "λ§μμ
λλ€.");
System.out.println("νμ¬ λ³΄λμ€ μ μλ" + b.bonusPoint + "μ μ
λλ€.");
}
}