Dart는 생성자를 상속하지 않습니다.

3536 단어 Dart

발생한 문제



슈퍼 클래스에서 생성자를 정의하고 있는데, 그 클래스의 서브 클래스를 인스턴스화하려고 하면, The named parameter 'xxx' isn't defined 라는 에러가 발생한다.

super_class.dart
import 'package:flutter/material.dart';

class SuperClass {
  const SuperClass({this.argument});

  @protected
  final String argument;
}

child_class.dart
import 'super_class.dart';

class ChildClass extends SuperClass {
  void method() {
    print(argument);
  }
}


main.dart
import 'child_class.dart';

final myClass = ChildClass(argument: 'hoge');



원인



Dart 공식 문서 에 의하면, constructor 은 상속되지 않는 것 같다.

아래 발췌.

Constructors aren’t inherited
Subclasses don’t inherit constructors from their superclass. A subclass that declares no constructors has only the default (no argument, no name) constructor.

일본어 번역

생성자는 상속되지 않습니다.
서브 클래스는 그 슈퍼 클래스의 생성자 를 상속하지 않는다. constructor 을 정의하고 있지 않는 서브 클래스는 , 디폴트 (인수 없음, 이름 없음)의 constructor 밖에 가지지 않는다.

그렇습니다.
즉 서브 클래스에서도 생성자를 정의하면 OK.

child_class.dart
import 'super_class.dart';

class ChildClass extends SuperClass {
  const ChildClass({String argument}) : super(argument: argument);

  void method() {
    print(argument);
  }
}

흠. 서브 클래스에서 하나 하나 정의하는 것이 귀찮지 않습니까?

좋은 웹페이지 즐겨찾기