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) {}
}