Java/Java(base)

[Java] 추상클래스 abstract class, final

ID_DI 2021. 12. 1. 00:42

추상 클래스

  • 클래스들의 틀 (틀 자체의 틀)
  • 추상적인 내용만 정의하고 있는 클래스로, 구체적인 내용은 상속받아서 하위클래스에서 구현되도록 설계된 클래스이다.
  • 추상 클래스(부모)는 클래스(자식)의 공통 요소들을 가상화시켜놓기 때문에 객체화시 구현(재정의)을 꼭 해야한다.
  • 부모 추상 클래스의 역할은 단지 자식 클래스들을 만들 때 도와주는 역할을 수행한다.
  • 자식 클래스에서 만들어질 메소드의 이름과 형태만 가지고 있다.
  • 메소드에 {}바디가 없다. 이런 메소드를 추상 메소드라고 하며 abstract 키워드가 리턴타입 앞에 붙는다.
  • 추상 메소드가 하나라도 포함되어 있다면 추상 클래스로 만들어야 한다.

추상 클래스 선언

abstract class 추상클래스명{
    abstract 리턴타입 추상메소드명();

    리턴타입 일반메소드명(){ 메소드내용 };
}
  • 추상 메소드는 자식 클래스에서 강제적으로 반드시 재정의 되어야 한다.

    • 자식클래스를 생성할 때, 재정의하지 않으면 오류 -> 재정의에 대한 강제성 부여
  • 일반 메소드도 추상 클래스 내부에서 존재할 수 있다.

final : 재정의되어서는 안되는 메소드에 사용

abstract class 가 아니어도 사용 가능

abstract class 추상클래스명{
    abstract 리턴타입 추상메소드명();

    리턴타입 일반메소드명(){ 메소드내용 };

    final 리턴타입 메소드명(){ 메소드 내용};
}

Ex) Abstract class 사용

  • abstract class Shape
public abstract class Shape {
    double height;
    double width;

//넓이는 각 도형마다 공식이 다르다.    
//    double getArea() { 
//        return height * width;
//    }
    abstract double getArea();

    final void init() {
        System.out.println("나는 도형입니다.");
    }

    void getName() {
        System.out.println("저는 도형이에요");
    }
}
  • 자식클래스 class Tri
public class Tri extends Shape{
    @Override
    double getArea() {
        return width*height/2;
    }

    @Override
    void getName() {
        System.out.println("저는 삼각형이에요");
    }

//    final 메소드는 사용 불가능
//    void init() {
//    }
}