Dart - Extend a class

MJ·2023년 5월 30일
0
  • 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

profile
느긋하게 살자!

0개의 댓글