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

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

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

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

Q&A

解決済

3回答

1022閲覧

javaのインターフェイスの働き方について

qkazooing

総合スコア22

Java

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

0グッド

0クリップ

投稿2018/11/29 13:38

編集2018/11/29 14:24

インターフェイスを用いたコードを作成するときに例文をみてわからないことがあります
例として
interfaceをX
クラスAをA a = new A();
と作成したあと、
X test = a.a'();
というコードがあるのですが(a'はクラスAの中のメソッドです)
インターフェイス型のtestが作成されたということでしょうか?またインターフェイス型の変数は何か特別な働きがありますか?

また別クラスのBやCの中のメソッドにおいて
public static X xb(){.....}
X xc(){.....}
のようにメソッドxb、xcが作成されているのですがこれはどういうことなのでしょうか?
ご教授お願いします。

メソッドをつくるにはpublic static メソッド名{}のような形だと思うんですけどメソッド名の前にインターフェイス名を入れる(public static インターフェイス名 メソッド名{})とどうなるのでしょうか?
インターフェイスについて勉強不足なのでこの部分が特によくわからないです。

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

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

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

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

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

guest

回答3

0

継承、ってのはクラスを受け継ぎ、それを拡張させたりしますが、
インターフェースはメソッドや変数をクラスに付加する、ものです

これで何ができるようになるのか、ちと考えてみたり調べてみたりするといいかと。

投稿2018/11/29 14:29

y_waiwai

総合スコア87719

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

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

0

おそらくクラスAはXというインターフェイスを実装しているのでしょう。
(クラスAの宣言をみるとA inplements Xとなっていませんか?)

それでX test = a.a'();X testの部分は、

testにはXというインターフェースを継承したクラスのインスタンスが格納されます

という宣言です。

なので

インターフェイス型のtestが作成された

というより、

Xを実装したAのインスタンスが作成され、変数testに格納された

という方がしっくり来ますね。

インターフェイス型の変数は何か特別な働きがありますか

機能は特にありません。上記の通り、「この変数にはXインターフェイスが実装されたクラスのインスタンスが入ります」という宣言です。
ただこれは、複数人で開発する際とても重要です

また別クラスのBやCの中のメソ...

すみません、ここは情報が少なすぎて質問の意図がわかりませんでした。

おそらくもう一度

  • インターフェイスとは何か
  • インターフェイスの存在意義
  • インターフェイスのメリット・デメリット

あたりを復習してみると良いかもしれませんね。

投稿2018/11/29 14:11

kounetsuman

総合スコア17

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

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

0

ベストアンサー

interfaceをX

クラスAをA a = new A();
と作成したあと、
X test = a.a'();
というコードがあるのですが(a'はクラスAの中のメソッドです)
インターフェイス型のtestが作成されたということでしょうか?

a'()がどんなことをしているのかわかりませんが、
Xが継承されたクラスのインスタンスが生成され、
インターフェースX型のtestという変数に格納された」
ということになります。

またインターフェイス型の変数は何か特別な働きがありますか?

変数の定義ではインターフェース型を使うことが可能で、
これは、そのインターフェース型を継承したインスタンスであれば格納可能となります。

例えば、インターフェースDrinkがあるとして、
それを実装した以下のクラスがあるとします。

  • Water
  • Juice
  • Beer

これらは全てDrink型として定義できるので、配列やメソッドの引数などで重宝します。

Java

1Drink[] drinks = { 2 new Water(), 3 new Juice(), 4 new Beer() 5};

Java

1public void addDrink(Drink d) { 2 drinks.add(d); 3}

また別クラスのBやCの中のメソッドにおいて

public static X xb(){.....}
X xc(){.....}
のようにメソッドxb、xcが作成されているのですがこれはどういうことなのでしょうか?

こちらに関しては情報が不足しすぎてるので適切な回答ができかねます。
「作成されている」のは必要だからではないですか?

[コメントを受けて追記]

メソッドをつくるにはpublic static メソッド名{}のような形だと思うんですけどメソッド名の前にインターフェイス名を入れる(public static インターフェイス名 メソッド名{})とどうなるのでしょうか?

そもそもメソッドの書き方が間違っています。
Javaのメソッドは最低限以下の形式が必要です。

Java

1[返り値の型] [メソッド名]() { 2 3}

この形式から、返り値の前に「アクセス修飾子(publicなど)」や「static」がついたり、
メソッド名の後の()の中に引数が加わったりします。

public static X xb() { }という形のXは「返り値の型」の部分にあたりますので、
インターフェースX型(それを継承したクラス)を返しますということになります。

投稿2018/11/29 14:01

編集2018/11/29 14:48
dice142

総合スコア5158

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

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

qkazooing

2018/11/29 14:08

回答ありがとうございます メソッドをつくるにはpublic static メソッド名{}のような形だと思うんですけどメソッド名の前にインターフェイス名を入れる(public static インターフェイス名 メソッド名{})とどうなるのでしょうか? インターフェイスについて勉強不足なのでこの部分が特によくわからないです。
dice142

2018/11/29 14:48

回答に追記しました。
qkazooing

2018/11/29 14:57

わかりやすい説明ありがとうございました
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問