package step3;
/*
void beFriendly() {
System.out.println("친근하게 굴기");
}
void play() {
System.out.println("놀기");
}
*/
abstract 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("돌아다닌다.");
}
// 애완동물용 추상메소드
abstract void beFriendly();
abstract void play();
}
/*
Animal을 상속받는 하위클래스
: Dog, Wolf, Hippo(하마), Cat, Tiger(호랑이), Lion(사자)
*/
class Hippo extends Animal { // 하마
@Override
void makeNoise() {
System.out.println("하마스럽게 소리내기~~");
}
@Override
void eat() {
System.out.println("하마스럽게 먹는다.");
}
// 단점: 애완동물용 메소드를 야생동물이 구현할 수밖에 없는 문제점
@Override
void beFriendly() {
}
@Override
void play() {
}
}
abstract class DogLike extends Animal { // 개과 동물
@Override
void roam() {
System.out.println("무리지어 돌아다닌다.");
}
} // DogLike class
abstract 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("강아지스럽게 먹는다.");
}
@Override
void beFriendly() {
System.out.println("강아지스럽게 친근하게 굴기");
}
@Override
void play() {
System.out.println("강아지스럽게 놀기");
}
}
class Wolf extends DogLike {
@Override
void makeNoise() {
System.out.println("아우~~~~!");
}
@Override
void eat() {
System.out.println("늑대스럽게 먹는다.");
}
// 단점: 애완동물용 메소드를 야생동물이 구현할 수밖에 없는 문제점
@Override
void beFriendly() {
}
@Override
void play() {
}
}
class Cat extends CatLike {
@Override
void makeNoise() {
System.out.println("야옹~~!");
}
@Override
void eat() {
System.out.println("고양이스럽게 먹는다.");
}
@Override
void beFriendly() {
System.out.println("고양이스럽게 친근하게 굴기");
}
@Override
void play() {
System.out.println("고양이스럽게 놀기");
}
}
public class Test {
public static void main(String[] args) {
// 장점: 다형적으로 사용가능
Animal ani = new Dog();
ani.beFriendly();
ani = new Cat();
ani.play();
ani = new Hippo();
ani.beFriendly();
// 단점: 야생동물이 애완동물의 기능 여전히 가지는 문제점.
// 메소드 코드블록이 비어있는 형태의 구현은 사용자를 속이는 형태.
}
}
'IT > Java' 카테고리의 다른 글
자바 추상메소드, 인터페이스를 이해할 수 있는 순차적 예제5 (0) | 2018.07.23 |
---|---|
자바 추상메소드, 인터페이스를 이해할 수 있는 순차적 예제4 (0) | 2018.07.23 |
자바 추상메소드, 인터페이스를 이해할 수 있는 순차적 예제2 (0) | 2018.07.23 |
자바 추상메소드, 인터페이스를 이해할 수 있는 순차적 예제1 (0) | 2018.07.23 |
자바 데이터베이스 연동 (0) | 2018.07.22 |