IT/Java

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

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

package step4;



/*

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("돌아다닌다.");

}

}


/*

 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("강아지스럽게 먹는다.");

}

// 애완동물용 메소드

void beFriendly() {

System.out.println("강아지스럽게 친근하게 굴기");

}

void play() {

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("고양이스럽게 먹는다.");

}

void doFriendly() {

System.out.println("고양이스럽게 친근하게 굴기");

}

}



public class Test {


public static void main(String[] args) {

// *애완동물로 볼수있는 클래스(Dog,Cat) 각각이

// 따로 애완동물용 메소드를 가지는 경우

// 단점: 다형성을 이용한 다형적 코드를 사용못함

Animal ani = new Dog();

// ani.beFriendly(); // 호출못함

Dog dog = new Dog();

dog.beFriendly();

Cat cat = new Cat();

cat.doFriendly();

}


}