package ex05.ch02;
class Car { // 다형성을 만족하면 is 성립 (<-> has는 나중에)
void run() {
System.out.println("자동차 달린다");
}
}
class Morning extends Car {
void run() {
System.out.println("모닝 달린다");
}
}
class Sonata extends Car {
void run() {
System.out.println("소나타 달린다");
}
}
public class ExMeh01 {
public static void main(String[] args) {
Morning a1 = new Morning(); // [Morning(run), Car(run)]
a1.run();
Car a2 = new Morning(); // [Morning(run), Car(run)]
a2.run();
Car a3 = new Sonata();
a3.run();
}
}
package ex05.ch02;
class 운동선수 {
// getter
public int getHp() {
return 1;
}
// setter
public void setHp(int hp) {
}
}
class 타이슨 extends 운동선수 {
int hp = 100;
public int getHp() { // 재정의
return hp;
}
// context (문맥)
public void setHp(int hp) {
this.hp = hp;
}
}
class 맥그리너 extends 운동선수 {
int hp = 100;
public int getHp() {
return hp;
}
public void setHp(int hp) {
this.hp = hp;
}
}
public class ExMeh02 {
static void attack(맥그리너 u1) { // 구체적인 것에 의존
u1.hp = u1.hp - 10;
}
static void attack(타이슨 u1) { // 구체적인 것에 의존
u1.hp = u1.hp - 10;
}
static void attack(운동선수 u1) { // 추상적인 것에 의존
//u1.hp // 이걸 해결하는 방법 = override
//System.out.println(u1.getHp()); // 뭐가 new로 들어왔는지에 따라 맥그리너거나 타이슨의 hp
u1.setHp(u1.getHp() - 10);
}
public static void main(String[] args) {
/*
맥그리너 u1 = new 맥그리너();
attack(u1);
System.out.println(u1.hp);
타이슨 u2 = new 타이슨();
attack(u2);
System.out.println(u2.hp);
*/
운동선수 u3 = new 타이슨();
attack(u3);
attack(u3);
attack(u3);
System.out.println(u3.getHp());
}
}

Share article