오버로딩 문제
package ex05.ch02;
class Animal {
int i = 1;
String name = "동물";
}
class Cat extends Animal {
String name = "고양이";
int age = 18;
}
class Dog extends Animal {
String name = "강아지";
}
public class ExVar01 {
public static void main(String[] args) {
Animal a1 = new Animal(); // [animal] -> 메모리에 떴다는 표시
System.out.println(a1.i + ", " + a1.name);
Dog a2 = new Dog(); // [Animal, Dog]
System.out.println(a2.i + ", " + a2.name); // 상속의 목적 = 타입 일치
Animal a3 = new Dog(); // [animal(i=1, name=동물), dog(name = 강아지)]
System.out.println(a3.i + ", " + a3.name);
Cat a4 = new Cat(); // [animal(i=1,name=동물), Cat(k=2, name = 고양이)]
System.out.println(a4.i + ", " + a4.name);
Animal a5 = new Cat(); // [animal(i=1,name=동물), Cat(k=2, name = 고양이)]
System.out.println(a5.i + ", " + a5.name);
// System.out.println("Animal을 바라보는데 자식의 k값 찾아지나 : k=" + a5.k);
}
}

오버라이드 문제
package ex05.ch02;
class 운동선수 {
public int getHp() {
return 2315388;
}
//setter
public void setHp(int hp) {
}
}
class 타이슨 extends 운동선수 {
int hp = 100;
public int getHp() {
return hp;
}
// context (문맥)
public void setHp(int hp) { // 90
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.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);
System.out.println(u3.getHp());
// 맥그리너 u1 = new 맥그리너();
// attack(u1);
// System.out.println(u1.hp);
// 타이슨 u2 = new 타이슨();
// attack(u2);
// System.out.println(u1.hp);
}
}

Share article