오버로딩 문제
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