티스토리 뷰

추상 class (abstract class)


  • 메서드 내용이 추상적이기 때문에 만드는 것입니다.

  • 구현 코드가 없이 메서드 선언만 있는 것

  • 상위 클래스에서 구현 x -> 하위 클래스에서 구현해라 !!

// Animal.java 상위 class
public abstract class Animal {
    abstract void shouting();
    abstract void type();

    public void move() {
        System.out.println("움직입니다.");
    }
}

// Human.java 하위 class
public class Human extends Animal {
    @Override
    void shouting() {
        System.out.println("나는 사람이다!!");
    }
    @Override
    void type() {
        System.out.prinln("포유류 입니다.");
    }
}

//Test.java
public class Test {
    public static void main(String[] args)
    {
        Animal animal = new Human();

        animal.shouting();
        animal.type();
    }
}

템플릿 메서드 (final)


  • 코드의 흐름(시나리오)를 정의하는 메서드

  • 하위 클래스에서 재정의 할 수 X

  • 추상 클래스에서 템플릿 메서드로 전체적인 흐름 정의

    -> 하위 클래스에서 다르게 구현하는 부분은 추상 메서드로 선언하여 수정한다.


// Animal.java 상위 class
public abstract class Animal {
    public static final int MIN = 1;

    abstract void shouting();
    abstract void hunting();

    public void move() {
        System.out.println("움직입니다.");
    }

    //추상 메서드가 아니여서 error X
    // 필요할 경우 하위 class에서 재정의 해서 사용(abstract처럼 꼭 재정의 안해도 됩니다.)
    // hook 메서드
    public void wash() {} 

    final public void eat() {
        shouting();
        move();
        hunting();
        wash();
    }
}

// Human.java 하위 class
public class Human extends Animal {
    @Override
    void shouting() {
        System.out.println("나는 사람이다!!");
    }
    @Override
    void hunting() {
        System.out.println("도구로 사냥");
    }
    @Override
    public void wash() {
        System.out.println("음식을 씼습니다.");
    }
}

//Tiger.java 하위 class

public class Tiger extends Animal {
    @Override
    void shouting() {
        System.out.println("나는 호랑이다!!");
    }
    @Override
    void hunting() {
        System.out.println("발톱으로 사냥");
    }
}

//Test.java
public class Test {
    public static void main(String[] args)
    {
        Animal animalh = new Human();
        Animal animalt = new Tiger();

        animalh.eat();
        animalt.eat();

        System.out.println(Animal.MIN);
    }
}

반응형

'Tip and Error > JAVA' 카테고리의 다른 글

인터페이스 활용 (interface)  (0) 2021.04.14
인터페이스 (interface)  (0) 2021.04.14
instance 형 확인 (instanceof)  (0) 2021.04.12
Override  (0) 2021.04.08
상속 & super()  (0) 2021.04.08
공지사항
최근에 올라온 글