2.2.4 추상 클래스(Abstract Class)

2.2.4 추상 클래스(Abstract Class)

Haxe 4.2.0 이후

추상(Abstract)과 혼동하지 마세요 — 추상 클래스는 부분 구현(partial implementation)을 가진 클래스예요. 따라서 추상 클래스는 인스턴스화할 수 없고 먼저 확장되어야 하며, 자식 클래스가 모든 추상 메서드의 구현을 제공하거나 그 자체가 abstract로 선언되어야 해요.

추상 클래스와 달리, 모든 메서드를 구현하는 클래스를 concrete 클래스라고 해요. 추상 클래스에서 상속받는 concrete 클래스는 abstract 키워드 없이 선언되어야 하고, 부모 클래스의 모든 추상 메서드가 구현되어야 합니다.

추상 클래스는 concrete 클래스가 지원하는 모든 언어 기능을 지원하므로, 어떤 클래스든 abstract로 선언할 수 있어요. 또한 추상 클래스 메서드는 인터페이스와 유사하게 동작합니다; 메서드의 구현은 override 키워드를 사용하지 않아요.

abstract class Vehicle {
  var speed:Float = 0;

  abstract public function getWheels():Int;

  public function new() {}
}

class Car extends Vehicle {
  public function getWheels() {
    return 4;
  }

  public function accelerate() {
    speed += 1;
  }
}

class Bike extends Vehicle {
  public function getWheels() {
    return 2;
  }

  public function accelerate() {
    speed += 2;
  }
}

추상 클래스는 인터페이스의 부분 구현을 제공하는 데 사용될 수 있고, 다른 메서드의 구현은 자식 클래스에 맡겨요.

interface Vehicle {
  public function getFuelType():String;
  public function getWheels():Int;
}

abstract class Bike implements Vehicle {
  public function getWheels():Int {
    return 2;
  }

  public function new() {}
}

class EBike extends Bike {
  public function getFuelType():String {
    return "electric";
  }
}

다른 상속 관계와 마찬가지로, 자식 클래스는 부모 타입의 변수에 할당될 수 있고, abstract 클래스는 자식 클래스의 상속으로 확장될 수 있어요.

출처: Abstract Class

본문

추상 클래스의 정의

추상 클래스는 부분 구현을 가진 클래스로, 인스턴스화할 수 없고 확장해야 해요. 모든 추상 메서드가 구현되면 concrete 클래스가 됩니다. 추상 메서드의 구현은 override 키워드를 사용하지 않습니다.

예제

abstract class VehiclegetWheels()를 추상 메서드로 선언하고, CarBike가 각각 구현해요. 추상 클래스는 인터페이스의 부분 구현을 제공할 수도 있습니다.

특징

추상 클래스는 concrete 클래스가 지원하는 모든 기능을 지원하고, 자식은 부모 타입 변수에 할당될 수 있습니다.

더 알아보기