JAVA 추상메소드&추상클래스

강효림·2023년 4월 20일
0

JAVA

목록 보기
9/19

추상메소드(abstract method)란?

선언되어 있으나 구현이 안되어있는 메소드
선언할 때는 [ abstract ] 를 사용한다.

public abstract void Test();

구현할 때는 서브클래스에서 오버라이딩을 해야한다.

추상클래스(abstract class)란?

추상메소드와 마찬가지로 abstract로 선언이 되어있으나 구현이 안되어있는 클래스이다.

추상클래스는 2가지 종류를 가지고 있다.

  • 추상메소드를 하나라도 가진 클래스
    클래스 앞에 abstract라고 선언해야함

    abstract class Person{ // 추상클래스 선언
    public Person( ){ }
    public void customer( ) { use( ); }
    abstract public void use( ); // 추상메소드
    }

    body( { } )가 없고 앞에 abstract라고 선언한 메소드가 추상메소드이다.

  • 추상메소드가 하나도 없지만 abstract로 선언된 클래스

    abstract class Person{ // 추상클래스 선언
    String name;
    public void load( String name ){
    this.name = name;
    }
    }

추상메소드와 달리 body가 있어도 abstract가 붙으면 추상클래스이다.

추상클래스는 객체를 생성할 수 없다.

abstract 라고 선언한 추상클래스안에서 객체를 생성하려한다면 오류가 발생한다.

오류메세지

Cannot instantiate the type Shape
( Shape
유형을 인스턴스화할 수 없습니다 )

추상클래스의 상속

추상클래스도 상속을 할 수 있는데 두가지 방법이 있다.

  • 추상클래스의 단순 상속
    말 그대로 추상클래스를 상속받아 추상메소드를 구현하지 않으면 추상클래스가 된다. 상속받은 추상클래스도 abstract로 선언을 해야한다.

  • 추상클래스 구현 상속
    서브클래스에서 슈퍼클래스의 추상메소드를 구현하기 때문에 서브클래스는 추상클래스가 아니다.
    즉, 오버라이딩 한 것이다.

추상클래스의 구현&활용 예시

밑은 추상클래스를 상속받아 만든 서브클래스에서 추상클래스 내에 있던 메소드를 오버라이딩해 구현한 사례이다. 그래서 재정의된 클래스들은 추상클래스가 아니며 인스턴스를 생성할 수 있다.

원래 Shape 클래스
추상화된 Shape 클래스

이후 서브클래스를 재정의 한다. 안하면 오류가 발생하고 재정의를 하지않고 오류도 안내고 싶다면 abstract를 붙이면 된다. 오버라이딩하기 때문에 추상메소드를 구현하지 않으면 컴파일 오류가 발생한다.

추상클래스의 용도

  • 설계와 구현을 분리할 수 있다.
    슈퍼클래스에서는 개념정의를 하고 각 서브클래스에 다른 구체적인 행위 구현이 필요하다면 목적에 맞게 추상메소드로 선언하면 된다.

  • 계층적 상속관계를 갖는 클래스구조를 만들때 사용한다.

예제연습

예제 1-7
위 Calculator 클래스를 상속받은 GoodCalc 구현하기
GoodCalc 클래스 구현
main에서 각 메소드들의 매개변수 값들을 받고 오버라이드된 메소드들에거 계산된 리턴값을 출력시킨다.

0개의 댓글