invalid_override_of_non_virtual_member 진단: non-virtual로 선언된 멤버는 서브클래스에서 오버라이드할 수 없어요

invalid_override_of_non_virtual_member 진단: non-virtual로 선언된 멤버는 서브클래스에서 오버라이드할 수 없어요

Dart 분석기가 내보내는 진단에는 이름이 있어요. invalid_override_of_non_virtual_member클래스·mixin·enum의 멤버가 @nonVirtual 어노테이션이 붙은 멤버를 오버라이드할 때 분석기가 알려주는 컴파일 타임 진단이에요. @nonVirtual로 선언된 멤버는 서브클래스에서 오버라이드할 수 없어요.

출처: invalid_override_of_non_virtual_member

본문

설명

분석기는 클래스, mixin, enum의 멤버가 @nonVirtual 어노테이션이 붙은 멤버를 오버라이드할 때 이 진단을 만들어요.

예시

다음 코드는 B의 메서드 mA의 메서드 m을 오버라이드하고, A의 메서드 m@nonVirtual 어노테이션으로 표시되어 있기 때문에 이 진단을 만들어요.

import 'package:meta/meta.dart';

class A {
  @nonVirtual
  void m() {}
}

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

흔한 해결 방법

슈퍼클래스의 메서드에 붙은 어노테이션이 맞다면(즉, 슈퍼클래스의 메서드를 오버라이드하려는 의도가 아니라면), 오버라이드하는 메서드를 제거하거나 이름을 바꿔요.

import 'package:meta/meta.dart';

class A {
  @nonVirtual
  void m() {}
}

class B extends A {}

슈퍼클래스의 메서드를 오버라이드하려는 의도라면 @nonVirtual 어노테이션을 제거해요.

class A {
  void m() {}
}

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

더 알아보기