package step5;
/*
void beFriendly() {
System.out.println("친근하게 굴기");
}
void play() {
System.out.println("놀기");
}
*/
interface Pet { // 애완동물
public abstract void beFriendly();
void play();
}
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 implements Pet {
@Override
void makeNoise() {
System.out.println("멍멍~!!");
}
@Override
void eat() {
System.out.println("강아지스럽게 먹는다.");
}
// 애완동물 메소드 구현
@Override
public void beFriendly() {
System.out.println("강아지스럽게 친근하게 굴기");
}
@Override
public 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 implements Pet {
@Override
void makeNoise() {
System.out.println("야옹~~!");
}
@Override
void eat() {
System.out.println("고양이스럽게 먹는다.");
}
// 애완동물용 메소드 구현
@Override
public void beFriendly() {
System.out.println("고양이스럽게 친근하게 굴기");
}
@Override
public void play() {
System.out.println("고양이스럽게 놀기");
}
}
class Robot {}
class IndustryRobot extends Robot {}
class RoboDog extends Robot implements Pet {
@Override
public void beFriendly() {
System.out.println("로봇강아지스럽게 친근하게 굴기");
}
@Override
public void play() {
System.out.println("로봇강아지스럽게 놀기");
}
}
public class Test {
public static void main(String[] args) {
Animal ani = new Dog(); // 업캐스팅
ani.eat();
ani.sleep();
ani.makeNoise();
Pet pet = new Dog(); // 인터페이스 타입 변수로 업캐스팅
pet.beFriendly();
pet.play();
pet = new Cat(); // 인터페이스 타입 변수로 업캐스팅
pet.beFriendly();
pet.play();
// 인터페이스로 객체를 사용하는 것은 느슨한 결합
// 모듈 간 결합: 결합도는 낮을수록 좋다.
// 응집도는 높을수록 좋다.
// 결합도 : 모듈간 의존관계
// 응집도 : 모듈안에서 얼마나 유사한 기능끼리 모여있는지의 정도
}
}
'IT > Java' 카테고리의 다른 글
자바 인터페이스 다중 상속, 구현 예제 (0) | 2018.07.23 |
---|---|
자바 JFrame 상속 받는 GUI 예제 (0) | 2018.07.23 |
자바 추상메소드, 인터페이스를 이해할 수 있는 순차적 예제4 (0) | 2018.07.23 |
자바 추상메소드, 인터페이스를 이해할 수 있는 순차적 예제3 (0) | 2018.07.23 |
자바 추상메소드, 인터페이스를 이해할 수 있는 순차적 예제2 (0) | 2018.07.23 |