質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.47%
Flutter

Flutterは、iOSとAndroidのアプリを同じコードで開発するためのフレームワークです。オープンソースで開発言語はDart。双方のプラットフォームにおける高度な実行パフォーマンスと開発効率を提供することを目的としています。

Dart

Dartは、Googleによって開発されたJavaScriptの代替となることを目的に作られた、ウェブ向けのプログラミング言語である。

Q&A

解決済

1回答

689閲覧

dart 親クラスのコンストラクタの呼び出しの記述方法 

SNG

総合スコア9

Flutter

Flutterは、iOSとAndroidのアプリを同じコードで開発するためのフレームワークです。オープンソースで開発言語はDart。双方のプラットフォームにおける高度な実行パフォーマンスと開発効率を提供することを目的としています。

Dart

Dartは、Googleによって開発されたJavaScriptの代替となることを目的に作られた、ウェブ向けのプログラミング言語である。

0グッド

0クリップ

投稿2022/09/30 20:43

編集2022/10/12 20:37

dartを学習していると親クラスのコンストラクタの呼び出し方がいくつかあるのですが、
下記のSubClass3つのコンストラクタは、「書き方」以外に何か違いがありますか?

dart

1class SuperClass { 2 String name; 3 SuperClass([this.name = 'taro']); 4} 5 6class SubClass1 extends SuperClass { 7 SubClass1([name = 'taro']) : super(name); //1つめ 8} 9 10class SubClass2 extends SuperClass { 11 SubClass2([super.name = 'taro']) : super(); //2つめ 12} 13 14class SubClass3 extends SuperClass { 15 SubClass3([super.name = 'taro']) //3つめ 16}

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

その定義だと違いは無いみたいです。

void main(){ SubClass1 sub1 = SubClass1(); print('${sub1.name}'); //taro SubClass2 sub2 = SubClass2(); print('${sub2.name}'); //taro SubClass3 sub3 = SubClass3(); print('${sub3.name}');//taro ///////////////////////////// SubClass1 sub11 = SubClass1('ziro'); print('${sub11.name}'); //ziro SubClass2 sub22 = SubClass2('ziro'); print('${sub22.name}'); //ziro SubClass3 sub33 = SubClass3('ziro'); print('${sub33.name}'); //ziro }

Subclass1の定義方法は以前からあった方法。
Subclass3の定義方法が新しく追加されました。
https://dart.dev/guides/language/language-tour#constructors
Invoking a non-default superclass constructor
の箇所をご参照ください。

Subclass2は見たこと無かったですが、動かしたら同じ結果が出るので、それでもいけるんですかね。
(コンストラクタのボディで初期化する方法も一応以前からあったと思います。)

投稿2022/10/01 01:03

moriman

総合スコア615

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

SNG

2022/10/12 20:50 編集

ご回答ありがとうございました。 大変参考になりました。 その後、SubClass2のようにリダイレクトをつけないと親クラスの普通のコンストラクタにリダイレクトされるということが理解できていなかったことがわかりました。 私が参考にしたコードでは、親クラスには名前付きコンストラクタだけしかなかったため、 SubClass3の書き方ではエラーになり、SubClass2のような書き方になっていたようです。 class SuperClass { String name; SuperClass.foo([this.name = 'taro']); } class SubClass2 extends SuperClass { SubClass2.foo([super.name = 'taro']): super.foo() ; }
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.47%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問