35강 : 추상화
클래스들 공통적인 속성|행위를 정의하여 코드 중복 줄이고, 다형성 실현함

실재 하지 않지만, 하위의 공통적인 속성|행위를 기준으로 정의한 개념







< 준비 >
이전에 구현한 “Animal”, “Fish”, “Person”, “Bird” 클래스 사용
< 진행 >
기존 Animal을 추상 클래스로 변경
새로운 구체 클래스 ”Dog”를 Animal을 상속하도록 구현하기

Animal.java
public abstract class Animal {
// 속성
protected String gender;
// 행위
public abstract void eat(String food);
public abstract void sleep();
}
Bird.java
public class Bird extends Animal {
private long weight;
private String color;
// 행위
@Override
public void eat(String food) {
System.out.printf("새가 %s 을 부리로 쪼아 먹고 있습니다.\n", food);
}
@Override
public void sleep() {
System.out.println("새가 잠을 자고 있습니다.");
}
public void fly(){
System.out.println("새가 날고 있습니다.");
}
}
Dog.java
public class Dog extends Animal {
@Override
public void eat(String food) {
System.out.printf("개는 %s 을 단단한 이빨로 물어 먹습니다.\n", food);
}
@Override
public void sleep() {
System.out.println("개는 잠을 잡니다.");
}
Fish.java
public class Fish extends Animal {
// 속성
private boolean havingPoison;
private String livingSea;
// 행위
@Override
public void eat(String food) {
System.out.printf("물고기가 %s 을 주둥이로 먹습니다.\n", food);
}
@Override
public void sleep() {
System.out.println("물고기가 잠을 자고 있습니다.");
}
public void swim(){
System.out.println("물고기가 헤엄을 치고 있습니다.");
}
}
Person.java
public class Person extends Animal {
private String name;
private String job;
private int height;
@Override
public void eat(String food) {
System.out.printf("사람이 %s을 젓가락으로 먹는다.\n", food);
}
@Override
public void sleep() {
System.out.println("사람이 자고 있습니다.");
}
public void walk(){
System.out.println("사람이 걷고 있습니다.");
}
}
AnimalTest.java
public class AnimalTest {
public static void main(String[] args){
// Animal animal = new Animal();
Animal animal2 = new Bird();
Animal animal3 = new Fish();
Animal animal4 = new Person();
Animal animal5 = new Dog();
// feed(animal, "빼뺴로");
feed(animal2, "벌레");
feed(animal3, "모이");
feed(animal4, "김밥");
feed(animal5, "고기");
}
public static void feed(Animal animal, String food){
animal.eat(food);
}
}