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

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

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

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Q&A

解決済

3回答

2002閲覧

interfaceの実装について

ssssa

総合スコア39

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

0グッド

1クリップ

投稿2018/08/17 15:53

以下、問題です。

以下のプログラムが、期待された実行結果通りにプログラムが動くように、インターフェースIAlarm、IClockおよび、Problemex4_2のmainメソッド内を実装しなさい。

期待する解答が下記になります。

アラームをセットする
アラームを鳴らす
アラームを止める
時刻を修正する
時刻を知る

私が実装した下記のコードだと、実行すると何も表示されないです。
どこを修正したらよいでしょうか?ご教示していただきたいです。

<AlarmClock> ```Java public class AlarmClock implements IAlarm, IClock { public void alarm() { System.out.println("アラームを鳴らす"); }
public void setAlarm() { System.out.println("アラームをセットする"); } public void stopAlarm() { System.out.println("アラームを止める"); } public void showTime() { System.out.println("時刻を知る"); } public void adjustTime() { System.out.println("時刻を修正する"); }

}

```Java public class Problemex4_2 { /** * @param args */ public static void main(String[] args) { AlarmClock ac = new AlarmClock(); // アラーム付き時計クラスのインスタンスを生成 } // アラームとしての処理 public static void funcAlarm(IAlarm alarm) { IAlarm.setAlarm(); // アラームのセット IAlarm.alarm(); // アラームを鳴らす IAlarm.stopAlarm(); // アラームを止める } // 時計としての処理 public static void funcClock(IClock clock) { IClock.adjustTime(); // 時刻を知る IClock.showTime(); //時刻を修正する } } ```<IClock> ```Java public interface IClock { static void adjustTime() { } static void showTime() { } } ```<IAlarm> ```Java public interface IAlarm { public static void setAlarm() { } public static void alarm() { } public static void stopAlarm() { } }

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

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

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

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

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

m.ts10806

2018/08/18 04:59

どのコードで実行させてますか?「実行した」手順も記載してください
m.ts10806

2018/08/18 05:05 編集

実行環境がわかりませんが、デバッグでステップ実行はしてみてくださいね。コードをどこを通っているか確認したり変数に想定通りの情報が格納されているか確認するやつです
guest

回答3

0

色々と気になる点はありますが、プログラムを実行すると、まずどの部分の処理が実行されるかわかりますか?

それがわかれば、どうして何も表示されないのかもわかると思います。

投稿2018/08/17 15:59

ykws

総合スコア1236

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

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

ssssa

2018/08/17 16:02

回答ありがとうございます。色々と無知な部分がございまして、処理の順番まで追えてなかったのでこれから調べてみます。
guest

0

ベストアンサー

どの部分が問題であたえられていて、どの部分を埋めるのかかがはっきりしなかったのですが、 interace を使う例として成り立ち、質問文にある実行結果が得られるように書いてみました。

java

1public class Problemex4_2 { 2 public static void main(String[] args) { 3 AlarmClock ac = new AlarmClock(); // アラーム付き時計クラスのインスタンスを生成 4 funcAlarm(ac); 5 funcClock(ac); 6 } 7 // アラームとしての処理 8 public static void funcAlarm(IAlarm alarm) { 9 alarm.setAlarm(); // アラームのセット 10 alarm.alarm(); // アラームを鳴らす 11 alarm.stopAlarm(); // アラームを止める 12 } 13 // 時計としての処理 14 public static void funcClock(IClock clock) { 15 clock.adjustTime(); // 時刻を知る 16 clock.showTime(); // 時刻を修正する 17 } 18} 19 20interface IClock { 21 public void adjustTime(); 22 public void showTime(); 23} 24 25interface IAlarm { 26 public void setAlarm(); 27 public void alarm(); 28 public void stopAlarm(); 29} 30 31class AlarmClock implements IAlarm, IClock { 32 public void alarm() { 33 System.out.println("アラームを鳴らす"); 34 } 35 public void setAlarm() { 36 System.out.println("アラームをセットする"); 37 } 38 public void stopAlarm() { 39 System.out.println("アラームを止める"); 40 } 41 public void showTime() { 42 System.out.println("時刻を知る"); 43 } 44 public void adjustTime() { 45 System.out.println("時刻を修正する"); 46 } 47}

実行例:
イメージ説明

public void setAlarm(); のところを
public static void setAlarm();
とか
public default void setAlarm();
とか、どれにするかで 設計の意図が変化します。
当然 AlarcClock クラスの中や main()中の書き方も変化します。

投稿2018/08/18 02:24

編集2018/08/18 22:33
katoy

総合スコア22324

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

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

ssssa

2018/08/18 05:05

回答ありがとうございます。 ご意見参考にさせていただきます。 わかりやすく丁寧に説明してくださいまして、本当にありがとうございます。
opyon

2018/08/18 05:54

@katoyさんの回答を見て自分の回答が間違っていることに気づきました。 悪い例として履歴を残して修正しました。 間違いつつも自力で回答して@katoyさんの正解を見て間違いに気づき2度勉強になりました。 良い質問でしたありがとうございます。
guest

0

参考質問:インターフェースって何のメリットがあるんですか?

追記:@katoyさんの回答を見て間違いに気づいたので訂正しました。

public static void を public void にするなど全体の流れを理解していないと動作しないようです。
最終的に@katoyさんの写経になってしましました。


回答が無いようなので自分も自信が無いので確認のため書いてみました。
添削していただけるとありがたいです。

インターフェースを検索するとimplements =「契約」や「約束」というニュアンスの説明が多いようです。
これは今は無いものに入れ替えられても変更や修正が最小限にする時に役立つそうです。

この例題のインターフェースの役割は次のような意味があると思われます。
IAlarmがアラーム関連の機能=メソッドを実装を「約束」します!という「契約」。
setAlarm() alarm() stopAlarm()

IClockが時計関連の機能=メソッドを実装を「約束」します!という「契約」。
adjustTime() showTime()

AlarmClock implements IAlarm, IClock で
アラームと時計の機能が「契約」されているので「約束」されたメソッドが必ずある。

main()側で実装可能となるといった流れかと思います。

java

1public class SampleMain { 2 public static void main(String[] args) { 3 // アラーム付き時計クラスのインスタンスを生成 4 SampleAlarmClock ac = new SampleAlarmClock(); 5 funcAlarm(ac); 6 funcClock(ac); 7 } 8 9 // アラームとしての処理 10 public static void funcAlarm(SampleIAlarm ac) { 11 SampleIAlarm.setAlarm(); 12 SampleIAlarm.alarm(); 13 SampleIAlarm.stopAlarm(); 14 } 15 // 時計としての処理 16 public static void funcClock(SampleIClock ac) { 17 SampleIClock.adjustTime(); 18 SampleIClock.showTime(); 19 } 20} 21 22//   //※以下間違いだと思うので訂正し悪い例として残しておきます 23//   //AlarmClockが変更されるとmain()も修正が必要になる 24 25// // アラームとしての処理 26// public static void funcAlarm(SampleAlarmClock ac) { 27// ac.setAlarm(); 28// ac.alarm(); 29// ac.stopAlarm(); 30// } 31// 32// // 時計としての処理 33// public static void funcClock(SampleAlarmClock ac) { 34// ac.adjustTime(); 35// ac.showTime(); 36// } 37

java

1public class SampleAlarmClock implements SampleIAlarm, SampleIClock { 2 public void alarm() { 3 System.out.println("アラームを鳴らす"); 4 } 5 public void setAlarm() { 6 System.out.println("アラームをセットする"); 7 } 8 public void stopAlarm() { 9 System.out.println("アラームを止める"); 10 } 11 public void showTime() { 12 System.out.println("時刻を知る"); 13 } 14 public void adjustTime() { 15 System.out.println("時刻を修正する"); 16 } 17}

java

1public interface SampleIAlarm { 2 public void setAlarm() ; 3 public void alarm() ; 4 public void stopAlarm() ; 5}

java

1public interface SampleIClock { 2 public void adjustTime() ; 3 public void showTime() ; 4}

投稿2018/08/17 19:30

編集2018/08/18 06:37
opyon

総合スコア1009

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

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

opyon

2018/08/18 06:39 編集

修正しましたが最終的に@katoyさんの写経となってしまいました。 自分が理解してないことに気付かされた良い質問と模範解答のおかげで勉強になりました。 ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問