Dart는 객체지향 프로그래밍 언어로, 클래스 계층 구조를 통해 상속을 지원한다. 상속은 클래스 간에 코드 재사용과 계층적 관계를 구성하는 데 사용된다. 하위 클래스(subclass)는 상위 클래스(superclass)의 특성과 동작을 상속받아 사용할 수 있다.
상속을 받을 클래스와 상위 클래스를 정의한다. 클래스는 class 키워드를 사용하여 정의하며, 상속받을 클래스는 extends 키워드를 사용하여 지정한다. 예를 들어, Subclass가 Superclass를 상속받는다면 다음과 같이 정의할 수 있다.
class Superclass {
// 슈퍼 클래스의 멤버들
}
class Subclass extends Superclass {
// 서브 클래스의 멤버들
}
서브 클래스는 상위 클래스의 모든 멤버(필드, 메서드)를 상속받는다. 이러한 멤버들은 서브 클래스에서 직접 접근하여 사용할 수 있다. 서브 클래스에서 상위 클래스의 멤버를 재정의하려면 오버라이딩(overriding)을 사용할 수 있다.
class Superclass {
void printMessage() {
print('안녕하세요');
}
}
class Subclass extends Superclass {
@override
void printMessage() {
print('상속받아 오버라이드하였습니다. 안녕하십니까');
}
}
void main() {
Subclass subclass = Subclass();
subclass.printMessage(); // '상속받아 오버라이드하였습니다. 안녕하십니까' 출력
}
서브 클래스의 생성자는 상위 클래스의 생성자를 호출하여 초기화할 수 있다. 이때 super 키워드를 사용 한다.
예를 들어, 상위 클래스 Superclass에 생성자가 정의되어 있다면, 서브 클래스 Subclass에서 super를 이용하여 상위 클래스의 생성자를 호출할 수 있다.
class Superclass {
String message;
Superclass(this.message);
}
class Subclass extends Superclass {
Subclass(String message) : super(message);
}
void main() {
Subclass subclass = Subclass('안녕!');
print(subclass.message); // '안녕!' 출력
}
상속을 통해 다른 클래스의 특성을 상속받고, 재정의하며, 확장할 수 있으므로 코드의 재사용성과 유지보수성을 높일 수 있다. 상속을 올바르게 사용하면 클래스 계층 구조를 잘 구성할 수 있다.