📋 추상 클래스

✅ 추상 클래스 특징

✅ 추상 메서드 구현 강제

package section11.abstract_case;

abstract public class Animal {
    String name;

    // 추상 메서드
    abstract void makeSound();

    // 일반 메서드
    void eat() {
        System.out.println(name + " 냠냠");
    }
}

class Dog extends Animal {

    // 생성자
    Dog(String name) {
        this.name = name;
    }

    // 추상 메서드 구현
    @Override
    void makeSound() {
        System.out.println(name + " 멍멍");
    }
}

class Cat extends Animal {

    // 생성자
    Cat(String name) {
        this.name = name;
    }

    // 추상 메서드 구현
    @Override
    void makeSound() {
        System.out.println(name + " 냐옹");
    }
}
package section11.abstract_case;

public class Ex1101 {
    public static void main(String[] args) {
        Dog dog = new Dog("Happy");
        dog.eat();
        dog.makeSound();

        // Cat 객체 생성
        Cat cat = new Cat("Coco");
        cat.eat();
        cat.makeSound();
    }
}

package section11.abstract_case;

abstract public class Animal {
    String name;

    // 추상 클래스의 생성자 추가
    Animal(String name) {
        this.name = name;
    }

    abstract void makeSound();

    void eat() {
        System.out.println(name + " 냠");
    }
}

class Dog extends Animal {

    Dog(String name) {
        // this.name = name;
        super(name); // 추가
    }

    @Override
    void makeSound() {
        System.out.println(name + " 멍멍");
    }
}

class Cat extends Animal {

    Cat(String name) {
        // this.name = name;
        super(name); // 추가
    }

    // 추상 메서드 구현
    @Override
    void makeSound() {
        System.out.println(name + " 냐옹");
    }
}

✅ 추상 클래스, 추상 메서드 용도