class Animal {
    String name;

    void setName(String name) {
        this.name = name;
    }
}

class Dog extends Animal {
    void sleep() {
        System.out.println(this.name + " zzz");
    }
}

class HouseDog extends Dog {
    void sleep() {
        System.out.println(this.name + " zzz in house");
    }

    void sleep(int hour) {
        System.out.println(this.name + " zzz in house for " + hour + " hours");
    }
}

public class Sample {
    public static void main(String[] args) {
        HouseDog houseDog = new HouseDog();
        houseDog.setName("happy");
        houseDog.sleep();  // happy zzz in house 출력
        houseDog.sleep(3);  // happy zzz in house for 3 hours 출력
    }
}
happy zzz in house
happy zzz in house for 3 hours

Dog 클래스의 sleep 함수를 상속받은 HouseDog 클래스에서 sleep 함수를 재정의 한다.

이것을 메소드 오버라이딩이라한다.

부모 클래스에 들어있는 함수 이름은 그대로 사용하되 내가 원하는 대로 내용만 바꿔서 사용한다.

실행결과는 HouseDog에서 정의한대로 in house가 붙어서 나온다.

+ Recent posts