- extextnds로 서브 클래스를 생성하고 super로 슈퍼 클래스임을 알려줌
class Swim {
void dive() {
_standUp();
_jumping();
}
}
calss Human extends Swim {
void dive() {
super.dive();
_moving();
}
}
Overriding members
- 서브 클래스는 연산자를 포함한 인스턴스 메소드, getter, setter를 override할 수 있다
- @override 어노테이션을 이용해 다음 처럼 사용할 수 있다
- override 메소드는 메소드 선언이 일치해야함
- 리턴 타입이 같거나 하위 타입이어야함
- 메소드의 인자는 같거나 상위 타입이어야함 (아래 코드에서는 int의 상위인 num을 사용)
- n개의 매게변수를 사용한다면 n개의 매게 변수가 일치해야함
- generic / non-generic 서로 override 할 수 없다
- 메소드 인자를 하위 타입으로 사용하는 것은 타입 에러를 발생시킬 수 있으나 에러가 발생하지않음을 보장할 수 있는 경우에는 cavariant를 사용해 하위 타입으로 사용할 수 있다
class Television {
// ···
set contrast(int value) {...}
}
class SmartTelevision extends Television {
@override
set contrast(num value) {...}
// ···
}
noSuchMethod()
- 코드가 존재하지 않는 메소드나 인스턴스 변수를 사용하려할 때 감지해주는 메소드
class A {
// Unless you override noSuchMethod, using a
// non-existent member results in a NoSuchMethodError.
@override
void noSuchMethod(Invocation invocation) {
print('You tried to use a non-existent member: '
'${invocation.memberName}');
}
}
출처 https://dart.dev/language/extend