IT/Java

자바 추상메소드, 인터페이스를 이해할 수 있는 순차적 예제2

노마드오브 2018. 7. 23. 21:17

package step2;


// step2 패키지에서는 애완동물 프로그램을 만든다고 가정함

/*

void beFriendly() {

System.out.println("친근하게 굴기");

}

void play() {

System.out.println("놀기");

}

*/


class Animal {

String food; // "meat"(고기)   "grass"(풀)

int hunger;  // 배고픈 정도

void makeNoise() {

System.out.println("소리내기");

}

void eat() { // 육식동물, 채식동물

System.out.println("음식을 먹는다.");

}

void sleep() {

System.out.println("잠은 잔다.");

}

void roam() {

System.out.println("돌아다닌다.");

}

// 애완동물용 메소드 구현

void beFriendly() {

System.out.println("친근하게 굴기");

}

void play() {

System.out.println("놀기");

}

}


/*

 Animal을 상속받는 하위클래스

 : Dog, Wolf, Hippo(하마), Cat, Tiger(호랑이), Lion(사자)

*/

class Hippo extends Animal {

@Override

void makeNoise() {

System.out.println("하마스럽게 소리내기~~");

}

@Override

void eat() {

System.out.println("하마스럽게 먹는다.");

}

}


class DogLike extends Animal { // 개과 동물

@Override

void roam() {

System.out.println("무리지어 돌아다닌다.");

}

} // DogLike class

class CatLike extends Animal { // 고양이과 동물

@Override

void roam() {

System.out.println("혼자서 돌아다닌다.");

}

} // CatLike class


class Dog extends DogLike {

@Override

void makeNoise() {

System.out.println("멍멍~!!");

}

@Override

void eat() {

System.out.println("강아지스럽게 먹는다.");

}

}

class Wolf extends DogLike {

@Override

void makeNoise() {

System.out.println("아우~~~~!");

}

@Override

void eat() {

System.out.println("늑대스럽게 먹는다.");

}

}


class Cat extends CatLike {

@Override

void makeNoise() {

System.out.println("야옹~~!");

}

@Override

void eat() {

System.out.println("고양이스럽게 먹는다.");

}

}


class Hamster extends Animal {

// beFriendly()와 play() 상속받음

// 손쉽게 애완동물 클래스 만들수 있음.

}



public class Test {


public static void main(String[] args) {

Hippo hippo = new Hippo();

// 문제점: 야생동물이 행동하면 안되는 애완동물 행동을 한다. 

hippo.beFriendly();

}


}