자바 공부 20 : 추상 클래스

친환경 개발자
|2024. 2. 11. 18:42

추상클래스란?

인터페이스의 역할도 하면서 클래스의 기능도 가지고 있는 클래스.

'abstract' 키워드를 사용해 선언해야 함

 

인터페이스와 추상 클래스의 차이

유사한 기능을 가지고 있으나, 추상 클래스는 일반 클래스처럼 객체변수, 생성자, private 메서드 등을 가질 수 있음

그러나 다중 상속은 불가능함!

 

추상클래스 사용 예

abstract class Predator extends Animal {
    abstract String getFood();   

    void printFood() {     
        Systehttp://m.out.printf("my food is %s\n", getFood());
    }
    static int LEG_COUNT = 4; 

    static int speed() {   
        return LEG_COUNT * 30;
    }
}

interface Barkable {
    void bark();
}

class Animal {
    String name;

    void setName(String name) {
        this.name = name;
    }
}

class Tiger extends Predator implements Barkable {
    public String getFood() {
        return "apple";
    }
    public void bark(){
        System.out.println("어흥");
    }
}
class Lion extends Predator implements Barkable {
    public String getFood() {
        return "banana";
    }
    public void bark() {
        System.out.println("으르렁");
    }
}

class Zookeeper {
    void feed(Predator predator){
        System.out.println("feed "+ predator.getFood());
    }
}

class Bouncer {
    void barkAnimal(Barkable animal) {
        animal.bark();
    }
}
public class Day17 {
    public static void main(String[] args) {
        Zookeeper zookeeper = new Zookeeper();
        Tiger tiger = new Tiger();
        Lion lion = new Lion();

        tiger.printFood();
        zookeeper.feed(tiger);  //feed apple 출력
        System.out.println();

        lion.printFood();
        zookeeper.feed(lion);   // feed banana 출력
        System.out.println();

        Predator.speed();
        System.out.println(Predator.LEG_COUNT);
        System.out.println();

        Bouncer bouncer = new Bouncer();
        tiger.bark();
        zookeeper.feed(tiger);
        lion.bark();
        bouncer.barkAnimal(tiger);
    }
}