invalid_override 진단: 상위 타입 멤버를 올바르게 오버라이드하고 있지 않아요

invalid_override 진단: 상위 타입 멤버를 올바르게 오버라이드하고 있지 않아요

Dart 분석기가 내보내는 진단에는 이름이 있어요. invalid_override클래스의 멤버가 상위 타입(supertype)의 멤버를 오버라이드하는데 그 오버라이드가 유효하지 않을 때 분석기가 알려주는 컴파일 타임 진단이에요. 오버라이드가 유효하려면 아래 조건을 모두 만족해야 해요.

출처: invalid_override

본문

설명

분석기는 클래스의 멤버가 상위 타입의 멤버를 오버라이드하는데 그 오버라이드가 유효하지 않을 때 이 진단을 만들어요. 오버라이드가 유효하려면 모두 참이어야 해요:

  • 오버라이드되는 멤버가 허용하는 모든 인자를 허용한다.
  • 오버라이드되는 멤버가 요구하지 않는 인자를 요구하지 않는다.
  • 오버라이드되는 멤버의 모든 매개변수의 타입이 오버라이드의 해당 매개변수에 할당 가능(assignable)하다.
  • 오버라이드의 반환 타입이 오버라이드되는 멤버의 반환 타입에 할당 가능하다.

예시

다음 코드는 매개변수 s의 타입(String)이 매개변수 i의 타입(int)에 할당 가능하지 않기 때문에 이 진단을 만들어요.

class A {
  void m(int p) {}
}

class B extends A {
  @override
  void m(String p) {}
}

흔한 해결 방법

유효하지 않은 메서드가 슈퍼클래스의 메서드를 오버라이드하려는 의도라면, 그에 맞게 바꿔요.

class A {
  void m(int p) {}
}

class B extends A {
  @override
  void m(int p) {}
}

슈퍼클래스의 메서드를 오버라이드하려는 의도가 아니라면 이름을 바꿔요.

class A {
  void m(int p) {}
}

class B extends A {
  void m2(String p) {}
}

더 알아보기