2.2.1 상속(Inheritance)
2.2.1 상속(Inheritance)
상속은 클래스가 다른 클래스의 필드와 메서드를 물려받는 메커니즘이에요. 자식 클래스는 부모 클래스의 모든 공개 필드를 상속하며, 필요에 따라 이를 재정의(override)할 수 있어요. Haxe는 클래스 간 단일 상속만 허용합니다.
class Point {
public var x:Int;
public var y:Int;
public function new(x:Int, y:Int) {
this.x = x;
this.y = y;
}
public function toString():String {
return "(" + x + ", " + y + ")";
}
}
class Point3 extends Point {
public var z:Int;
public function new(x:Int, y:Int, z:Int) {
super(x, y);
this.z = z;
}
override public function toString():String {
return "(" + x + ", " + y + ", " + z + ")";
}
}
Point3 클래스는 Point를 상속받아 z 필드를 추가하고 toString을 재정의했어요. 생성자에서 super(x, y)를 호출해 부모 클래스의 생성자를 실행하고, override 키워드로 부모의 메서드를 재정의하고 있어요.
상속 관계에서 자식 클래스의 인스턴스는 부모 클래스 타입으로 할당할 수 있어요(업캐스팅). 이는 유니피케이션 절에서 다룰 개념과 연결됩니다.
출처: Inheritance
본문
상속의 기본 규칙
클래스 상속에서 자식 클래스는 extends 키워드로 부모를 지정해요. 자식은 부모의 공개 필드를 모두 상속받고, 메서드를 override로 재정의할 수 있어요. Haxe는 단일 상속만 허용하므로 부모 클래스는 하나뿐입니다.
super 호출과 생성자
자식 클래스의 생성자에서는 super(...)를 호출해 부모 생성자를 실행하는 것이 일반적이에요. 이는 부모가 초기화해야 하는 필드를 올바르게 초기화하기 위함입니다. super로 부모 생성자를 호출하는 줄은 자식 생성자의 첫 줄이어야 해요.
재정의(Override)
override 키워드는 부모의 메서드를 자식에서 다시 구현할 때 사용해요. 재정의한 메서드는 부모와 동일한 시그니처(인자, 반환 타입)를 가져야 합니다. 자세한 override 규칙은 클래스 필드 절에서 다룹니다.
업캐스팅
상속에 따르면 자식 클래스의 인스턴스는 부모 클래스 타입으로 취급될 수 있어요. 예를 들어 Point3 인스턴스를 Point 타입 변수에 넣을 수 있습니다. 다만 이 경우 Point 타입으로는 Point3에만 있는 z 필드에 접근할 수 없어요.