こんにちは。
スーパークラスに引数のあるコンストラクタと引数のないコンストラクタをサブクラスで継承する際の質問です。
具体的に書くと下記になります。
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.3ベストアンサー
- 回答日時:
> なぜスーパークラスのA(int)は、呼び出さなくても良いのか
コンストラクタはメソッドと異なり、継承されないからです。
そのため、必要なければ呼び出す必要がないのです。
ご返答有難うございました。
なるほど!!
確かにそうですね。でも、コンストラクタも特殊ではありますがメソッドですよね...
自分でももっと考えてみます。
ありがとうございました。
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 という変数の修飾
-
変数名の付け方
-
複数の変数を宣言する時、同時...
-
生成したインスタンスを削除す...
-
インスタンス参照でアクセスで...
-
「インスタンス」の意味をわか...
-
newしないインスタンス?実体化...
-
JavaのSingletonパターンのpriv...
-
VB.NET getとsetの概念がわかり...
-
文字列を日付に変換でParseExce...
-
SQLを連続発行する時の正しい(?...
-
javaのクラスの作り方、エラー...
-
フォームのCheck boxとOLEObjec...
-
C# 外部のDLLの名前空間取得方...
-
ファイル読み込み/書き込み速度...
-
【java】コンストラクタの処理...
-
インスタンス生成で、○○.xxx();...
-
C#「オブジェクト参照が必要で...
-
C#において、同じインスタンス...
-
カンマ区切りの数値文字列を数...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
変数名の付け方
-
インスタンス参照でアクセスで...
-
複数の変数を宣言する時、同時...
-
private static という変数の修飾
-
VB.NET getとsetの概念がわかり...
-
C#において、同じインスタンス...
-
生成したインスタンスを削除す...
-
C# インスタンスの破棄
-
newしないインスタンス?実体化...
-
SQLを連続発行する時の正しい(?...
-
「インスタンス」の意味をわか...
-
文字列を日付に変換でParseExce...
-
フォームの存在をチェックする方法
-
変数の参照でエラーが出てしま...
-
javaのクラスの作り方、エラー...
-
オブジェクト参照がオブジェク...
-
String a = "a"; と String b =...
-
C#「オブジェクト参照が必要で...
-
エクセル(複数インスタンス)...
-
他のファイルの変数参照
おすすめ情報