추상 클래스 (Abstract Class)

조상원·2025년 8월 2일

JAVA

목록 보기
17/34
  • 클래스들의 공통적인 특성을 추출해서 선언한 클래스
  • 추상 클래스를 부모 타입으로, 객체로 생성될 실체 클래스가 자식 타입으로 구현되어 추상 클래스의 모든 특성을 물려받을 수 있음
  • 추상 클래스는 공통되는 필드와 메소드를 추출해서 만들었기 때문에 객체를 직접 생성해서 사용할 수 없고 부모 클래스로만 사용

추상 클래스 선언

[접근 제한자] abstract] class 클래스명 { ... }
  • 추상 클래스 내에 필드, 메소드, 생성자를 포함 가능
  • 추상 클래스는 객체로 생성이 안되지만 참조 변수의 타입으로는 사용이 가능
public abstract class Animal {
  private String name;
  private String kinds;
  
  public Animal() {
  }

  public Animal(String name, String kinds) {
      this.name = name;
      this.kinds = kinds;
  }

  public String bark() {
      return "짖는다.";
  }
}
Animal animal = new Animal(); // 에러 발생
Animal animal = new Dog(); // 다형성 적용 가능

추상 메소드

  • 추상 클래스에 선언된 메소드가 자식 클래스마다 실행 내용이 달라야 하는 경우 추상 메소드 선언 가능
  • 추상 메소드는 추상 클래스에서 선언할 수 있고 메소드의 선언부만 있는 메소드의 실행 내용인 중괄호{}가 없는 메소드
  • 추상 클래스를 상속하는 자식 클래스는 반드시 추상 메소드를 오버라이딩 해야함
  • 오버라이딩하지 않으면 컴파일 에러가 발생하는데 자식 클래스에서 내용을 채우도록 강제화 한다
[접근 제한자] abstract 반환형 메소드명([매개변수]);
public abstract class Animal {
  private String name;
  private String kinds;
  
  public Animal() {
  }

  public Animal(String name, String kinds) {
      this.name = name;
      this.kinds = kinds;
  }

  // 추상 메소드 선언
  public abstract String bark();
}
// 자식 클래스
public class Dog extends Animal {
  private int weight;

  // 생성자 선언
  ... 

  // 추상 메소드는 반드시 오버라이딩 해야 한다.
  @Override
  public String bark() {
      return "멍멍~ 짖는다.";
  }
}

0개의 댓글