現在、java初心者入門などの本で勉強しております
下記についてご教授お願い致します
コンストラクタ、interface、abstractの呼び出し順について質問なのですが、
下記プログラムを実行したところ(同一のパッケージ内に明記)
// インターフェイス
public interface interFaceClassSS {
public void show();
}
public interface interFaceClassS {
public void show();
}
// 抽象クラス
public abstract class ClassSSSab {
// 共通のメソッドを実装
//個々のメソッド
abstract void show();
}
// スーパークラス
public class ClassSSS extends ClassSSSab{
public ClassSSS(){
System.out.println("ClassSSS");
show();
}
public void show(){
System.out.println("ClassSSSabの抽象メソッドを実装");
}
}
public class ClassSS extends ClassSSS implements interFaceClassSS {
public ClassSS() {
System.out.println("ClassSS");
show();
}
public void show() {
System.out.println("interFaceClassSSを実装");
}
}
// メイン処理
public class ClassS extends ClassSS implements interFaceClassS {
public ClassS() {
System.out.println("ClassS");
show();
}
public static void main(String[] args) {
new ClassSSS();
System.out.println("");
new ClassSS();
System.out.println("");
new ClassS();
}
public void show() {
System.out.println("interFaceClassSを実装");
}
}
// 結果
ClassSSS
ClassSSSabの抽象メソッドを実装
ClassSSS
interFaceClassSSを実装
ClassSS
interFaceClassSSを実装
ClassSSS
interFaceClassSを実装
ClassSS
interFaceClassSを実装
ClassS
interFaceClassSを実装
の結果となりました。
当方が望む結果は、
ClassSSS
ClassSSSabの抽象メソッドを実装
ClassSSS
ClassSSSabの抽象メソッドを実装
ClassSS
interFaceClassSSを実装
ClassSSS
ClassSSSabの抽象メソッドを実装
ClassSS
interFaceClassSSを実装
ClassS
interFaceClassSを実装
上記となります。
new ClassSSSの処理は当方が望む結果なのですが、
new ClassSSでは、
newClassSSSの結果に
ClassSS
interFaceClassSS
が追加されると理解していたのですが、結果は、
違っておりました。
どこに誤りがあるのが、数日検討したのですが、分からない状態です。
ご教授の程お願い致します。
No.1ベストアンサー
- 回答日時:
interFaceClassSを実装
→
スーパークラスのshowをオーバーライド
これで説明付くんじゃないかしら。
早々ご返答ありがとうございます
>interFaceClassSを実装
>→
>スーパークラスのshowをオーバーライド
interFaceClassSを実装するとのことですが、
ClassSにてinterFaceClassSのshow()メソッドを実装
したコーディングをしていると思っているのですが、
理解不足だと思いますので勉強しなおします。
望む結果の有無よりも、オーバーライドの学習不足だと
思うのですが、処理の流れが下記のとうり
だと思うのですが、間違いないでしょうか?
1.new ClassSSSの処理
ClassSSSのコンストラクタ ClassSSSを表示
show()は、ClassSSS.show()を呼び出す
2.new ClassSSの処理
ClassSSSのコンストラクタ ClassSSSを表示
show()は、ClassSSS.show()を呼び出すのではなく、
ClassSS.show()によって、オーバーライドされる
ClassSSのコンストクタ classSSを表示
ClassSS.show()を呼び出す
3.new ClassSの処理
2.と同様サブクラスによってshow()がオーバーライドされている
上記だと、
// 結果
ClassSSS
ClassSSSabの抽象メソッドを実装
ClassSSS
interFaceClassSSを実装
ClassSS
interFaceClassSSを実装
ClassSSS
interFaceClassSを実装
ClassSS
interFaceClassSを実装
ClassS
interFaceClassSを実装
この結果になるな!と理解できます
上記の流れで間違いないなら、
サブクラスが、スーパークラスのコンストラクを読んだ場合、
サブクラスのメソッドがスーパークラスのコンストラクタに
明記しているメソッドをオーバーライドするとは、
認識していなかった点にありました
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Java javaのクラスの分け方について質問です。 APIの内部用と外部用でクラスを分けたいのですがインター 2 2022/04/26 16:06
- C言語・C++・C# C# DatagridviewにExcelシートを反映するとエラーが出る 2 2023/05/06 17:12
- Java java 飾子を付けること(public static・・・) ・コンソールへの出力処理はmainメ 2 2022/06/16 19:34
- Java java 入力 3 4 3 出力 ABC DEFG HIJ このようなプログラムの書き方を教えてくだ 2 2022/07/15 14:18
- Java java final 1 2022/06/10 22:49
- Java JavaのSingletonパターンのprivateの持つ意味が分かりません。 5 2022/06/12 10:38
- Java Java プログラム public class Main { public static void 3 2023/08/10 23:46
- C言語・C++・C# PC画面を録画するプログラムでdllの読み込みエラー 1 2023/04/22 08:31
- Ruby 【JAVA】数字をひし形に出力するプログラムについて 2 2022/07/11 23:32
- C言語・C++・C# Windows Formアプリからコンソールを呼び出して文字を出力させたい 8 2023/05/09 10:53
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
変数を動的に利用するには?
-
ArrayList でスタックを
-
コンストラクタの引数の中のnew?
-
インタフェイス実装と抽象クラ...
-
プログラミングの問題です。大...
-
Socketの接続のタイムアウトを...
-
JavaのEnum型について
-
"try{}catch(){}"文で"close()"...
-
Javaでlog4jを使ってログ出力を...
-
Processing :指定フォルダ内の...
-
NoSuchMethodErrorが解決できま...
-
現在時刻をYYYY-MM-DDThh:mm:ss...
-
【初心者です】javaで平均値を...
-
Timerについて教えて下さい
-
所持金の計算式とその表示の仕方
-
中カッコ{}だけの記述について
-
オーバーロードで
-
数字の大小の比較とテストメソッド
-
複素数の計算するクラスを足せ...
-
getActualMaximum(Calendar.DAY...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
プログラミングの問題です。大...
-
変数を動的に利用するには?
-
中カッコ{}だけの記述について
-
System.exit()の値を取得したい
-
Javaでlog4jを使ってログ出力を...
-
NoSuchMethodErrorが解決できま...
-
javaで特定の文字列から特定の...
-
Socketの接続のタイムアウトを...
-
Java プログラム public class ...
-
javaのプログラミングで作るRPG...
-
インタフェイス実装と抽象クラ...
-
コマンドライン引数の*(アフ...
-
【初心者です】javaで平均値を...
-
Javaで日本語の出力が文字化けする
-
(大至急)JavaでATMもどきを作成
-
コンストラクタの引数の中のnew?
-
Java 最大公約数 gcd
-
randomで
-
C# DatagridviewにExcelシート...
-
replaceAllが使えない場合の取...
おすすめ情報