추상 클래스란?

추상클래스는 클래스에 하나 이상의 추상메소드가 있는 클래스를 말한다.

추상클래스 자체로는 인스턴스를 생성하지 못하기 때문에 상속을 통해 인스턴스를 만든다.

추상 메소드란?

메소드의 선언부만 있고 구현부(내용)은 없는 메소드이다. 이 추상 클래스를 상속받은 클래스에서 오버라이딩하여 완성한다.

스토리텔링

추상클래스를 사용하는 이유 중 하나는 메소드 구현에 강제성을 주기 위함이다.

추상클래스를 상속받는 클래스는 반드시 추상 메소드를 구현해야 한다.

한 집단에 대해서 공통적인 행동이 있고, 각각의 개체마다는 개성이 있는 행동을 하는 무언가를 찾아 구현해보자.

포유류

포유류의 공통적인 특징은 젖샘이 있어 수유를 한다는 것이다.

개체마다 다른 점은 이동방식(보행, 비행, 헤엄)이 있다.

public abstract class Mammal {
    public void breastFeed(){
        // 포유류의 공통적인 특징은 젖샘이 있어 수유를 한다는 것이다.
    }

    //개체마다 다른 점은 이동방식(보행, 비행, 헤엄)이 있다.
    abstract void move();
}

class whale extends Mammal{
    @Override
    void move() {
        // swimming
    }
}

class human extends Mammal{
    @Override
    void move() {
        // walking
    }
}

class bat extends Mammal{
    @Override
    void move() {
        // flying
    }
}
public class MammalTest {
    public static void main(String[] args) {
        Mammal[] m = {
                new whale(),
                new human(),
                new bat()
        };

        m[0].breastFeed();
        m[0].move();

        m[1].breastFeed();
        m[1].move();

        m[2].breastFeed();
        m[2].move();
    }
}

abstract class Mammal {
    public void breastFeed(){
        // 포유류의 공통적인 특징은 젖샘이 있어 수유를 한다는 것이다.
        System.out.println("breast feeding");
    }

    //개체마다 다른 점은 이동방식(보행, 비행, 헤엄)이 있다.
    abstract void move();
}

class whale extends Mammal{
    @Override
    void move() {
        // swimming
        System.out.println("swimming");
    }
}

class human extends Mammal{
    @Override
    void move() {
        // walking
        System.out.println("walking");
    }
}

class bat extends Mammal{
    @Override
    void move() {
        // flying
        System.out.println("flying");
    }
}