teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

2

追記

2021/05/18 07:22

投稿

root_jp
root_jp

スコア4666

answer CHANGED
@@ -37,4 +37,5 @@
37
37
 
38
38
  このようにすることで`FunctionSet02(int y, int m, int d)`から、暗黙でデフォルトコンストラクタが呼ばれるためコンパイルは通ります。
39
39
  しかし、このコンストラクタを用意することでyに値が設定されていない状態でFunctionSet01のインスタンスを作成できてしまうようになるため、この方法はお薦めできません。
40
- FunctionSet01はyが初期化されていない状態でインスタンスが作成されてはいけないクラスだからです。
40
+ FunctionSet01はyが初期化されていない状態でインスタンスが作成されてはいけないクラスだからです。
41
+ (`FunctionSet01 instance = new FunctionSet01()` を許してはいけない)

1

誤字修正

2021/05/18 07:22

投稿

root_jp
root_jp

スコア4666

answer CHANGED
@@ -1,5 +1,5 @@
1
1
  継承をする場合、必ず親クラスのコンストラタを実行しなければなりません。
2
- 独自のコンストラクタを何も定義していなければ、内部で自動で作られデフォルトコンストラクタ(引数なしコンストラクタ)が呼ばれるため意識することはありませんが、今回は独自のコンストラクタを定義しているため、明示的に親のコンストラクタを呼ぶ必要があります。
2
+ 独自のコンストラクタを何も定義していなければ、内部で自動で作られデフォルトコンストラクタ(引数なしコンストラクタ)が呼ばれるため意識することはありませんが、今回は独自のコンストラクタを定義しているため、明示的に親のコンストラクタを呼ぶ必要があります。
3
3
 
4
4
  つまり`FunctionSet02(int y, int m, int d)`から親のコンストラクタを呼ばなければならないということです。
5
5