こんにちは。
スーパークラスに引数のあるコンストラクタと引数のないコンストラクタをサブクラスで継承する際の質問です。
具体的に書くと下記になります。
class A {
A () {}
A (int i) {}
}
class B extends A {
}
何がわからないかというと
『スーパークラスのA()は、サブクラスのBでわざわざ明示的にスーパークラスのコンストラクタ呼び出しをしなくても問題ないというのはわかるのですが、なぜスーパークラスのA(int)は、呼び出さなくても良いのかということです。』
もしかしたら基礎中の基礎かもしれませんが、ご教授よろしくお願いいたします。
No.4
- 回答日時:
#2です
>>これは、感覚的にはわかるのですが何故、どれか一つでよいのかが不思議です。
コンストラクタはインスタンスの初期化をするのがお仕事です。
つまりコンストラクタをオーバーロードするということは、初期化の方法をいくつも用意することと同意です。
いくつ初期化の方法があろうと、少なくともどれか1つを実行すれば初期化はできますよね?
というわけで、スーパークラスのコンストラクタを1つ呼び出せばそれで十分、というわけです
度々、ご返答有難うございます。
#2と#4の内容に少し矛盾を感じてしまいました。
#2だと必要ならばコンストラクタを呼び出すといっているのに対し#4だといくつ初期化の方法があろうと、少なくともどれか1つを実行すれば初期化はできるということは、引数のないコンストラクタがスーパークラスで使用さえしていればJAVAはデフォルトで引数のないコンストラクタの呼び出しをするということでわざわざ明示的にコンストラクタの呼び出しをする必要はないという解釈になる気がします。
すいません、教えて頂いている立場なのに偉そうなことを言って...
お忙しい中、本当に有難うございました。
No.2
- 回答日時:
こんにちは
Javaではスーパークラスのコンストラクタのうち、どれか一つをを呼び出せば良いからです。
明示的にサブクラスでコンストラクタを実装しない場合は、デフォルトコンストラクタが、引数なしのコンストラクタを呼んでいるからOK。
(もちろんコンストラクタを実装して引数なしのコンストラクタを呼んでも良いが、
スーパークラスに引数なしのコンストラクタがなければエラーになる)
引数ありのコンストラクタ呼び出しが必要な場合は、#1さんもおっしゃっているようにコンストラクタ内で
super(100);
と明示的に書いてあげると、コンストラクタを呼んでいるのでOK。ということになります
ご返答有難うございました。
>Javaではスーパークラスのコンストラクタのうち、どれか一つをを呼び出せば良いからです。
これは、感覚的にはわかるのですが何故、どれか一つでよいのかが不思議です。
自分でも、もうちょっと考えてみます。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Java インスタンス ダウンキャストについて以下の解釈であっているか教えて欲しいです。 サブクラスをスーパー 1 2022/03/27 18:53
- Java JavaのSingletonパターンのprivateの持つ意味が分かりません。 5 2022/06/12 10:38
- C言語・C++・C# C言語初心者 ポインタについて、お助けください、、 2 2023/03/15 23:50
- 大学・短大 C言語線形リストの問題です 3 2022/12/22 00:45
- その他(プログラミング・Web制作) Pythonで複数のメソッドをまとめて管理する方法について 1 2023/03/30 00:01
- C言語・C++・C# C言語初心者です、、、お助けください 2 2023/03/14 20:08
- その他(プログラミング・Web制作) どういうプログラムで組みますか?google colabでやってるんですけど、出来る方お願いします。 1 2022/07/06 09:28
- C言語・C++・C# C言語プログラム変更 2 2022/12/21 15:03
- その他(プログラミング・Web制作) どういうプログラムで組みますか?google colabでやってるんですけど、出来る方お願いします。 1 2022/07/17 18:41
- 大学受験 高校生物 ATPと光合成、呼吸のところ 1 2022/09/22 09:29
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
複数の変数を宣言する時、同時...
-
変数名の付け方
-
インスタンス参照でアクセスで...
-
private static という変数の修飾
-
VB.NET getとsetの概念がわかり...
-
SQLを連続発行する時の正しい(?...
-
フォームの存在をチェックする方法
-
newしないインスタンス?実体化...
-
変数の参照でエラーが出てしま...
-
生成したインスタンスを削除す...
-
文字列を日付に変換でParseExce...
-
C#において、同じインスタンス...
-
C#でオブジェクトの有無を取得する
-
VC#での24ビットbmp形式での保...
-
Eclipse3でVisualEditorが起動...
-
インスタンスのハンドル
-
C# 外部のDLLの名前空間取得方...
-
javaのクラスの作り方、エラー...
-
他のファイルの変数参照
-
(C++) for文内でのインスタンス...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
変数名の付け方
-
インスタンス参照でアクセスで...
-
private static という変数の修飾
-
VB.NET getとsetの概念がわかり...
-
C# インスタンスの破棄
-
複数の変数を宣言する時、同時...
-
C#において、同じインスタンス...
-
生成したインスタンスを削除す...
-
SQLを連続発行する時の正しい(?...
-
文字列を日付に変換でParseExce...
-
変数の参照でエラーが出てしま...
-
エクセル(複数インスタンス)...
-
フォームの存在をチェックする方法
-
VB6.0で、DLLを動的に参照したい
-
String a = "a"; と String b =...
-
C#「オブジェクト参照が必要で...
-
newしないインスタンス?実体化...
-
「インスタンス」の意味をわか...
-
SetWindowsHookExで質問
-
フィールドでのnewとコンストラ...
おすすめ情報