• ベストアンサー

クラス関係とは

質問させてください。 以下のページに、「インタフェースの実装はクラス関係に依存しません。」という記述がありますが、「クラス関係」とは何でしょうか。 http://www.javaroad.jp/java_interface1.htm 検索してもわかりませんでした。申し訳ありません。 どなたかご存知でしたらお教えください。

質問者が選んだベストアンサー

  • ベストアンサー
  • askaaska
  • ベストアンサー率35% (1455/4149)
回答No.1

そこだけ読むと分からないと思うけど その前から読めば ここで言う「クラス関係」というのは「継承」という関係ね。 例えば「空も飛べ海も潜れる車」というものを考え手みましょう。 これは車なんだから スーパークラス「車」のサブクラスになるの。 でも、飛べるてことは「飛行機」のサブクラスでもありたいわけ。 さらに、海を潜れるってことは「潜水艦」のサブクラスでもありたい。 だから「空も飛べ海も潜れる車」のスーパークラスとして「車」「飛行機」「潜水艦」と 複数持つことはJavaでは許可されないわ。 じゃあ、今目の前のある車はどうやって実装すれば良いか。 そこで役に立つのがインターフェースってわけ。 「飛ぶ」「潜れる」という二つのインターフェースを実装することで 「空も飛べ海も潜れる車」を実現するの。 目の前にある車が「飛ぶ」インターフェースを実装しているかどうかは instanceof演算子で判断できるようになるのよ。 こんな風に「車」とは直接何の関係もない「飛ぶ」というものを実装できる ということを言っているんだわ。

ryu-e
質問者

お礼

あ、いつもお世話になっています。 よくわかりました。ありがとうございます。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • ArrayListはListのデフォルト実装とは?

    「ArrayListはListのデフォルト実装」と書いてあるのですが、どういう意味でしょうか? http://topickup.web.fc2.com/java/list_arraylist.html ■自分の理解 ・List … インターフェイス ・ArrayList … インターフェイスを実装するクラスの中の一つ。どの実装クラスを利用するかはユーザーが選択? ■疑問点 ・Listインターフェイスのリファレンスに、デフォルト実装について明記されているかと思ったのですが、見つかりません ・どこかに書いているのでしょうか? http://docs.oracle.com/javase/jp/7/api/java/util/List.html ・検索したら、似た言葉で「デフォルトメソッド」があるのですが、「デフォルト実装」と同じ意味でしょうか? ・「デフォルトメソッド」はJava8の新機能? Java7以下では使えない?

    • ベストアンサー
    • Java
  • Commons-Discovery.jarとは?

    Commons-Discovery.jarとは一体どういう働きをしているのでしょうか? 公式http://commons.jakarta.jp/discovery/を読んだのですが クラスのインスタンス化やシングルトン(ファクトリ)クラスのライフサイクルの管理…という記述と 三行目以降の所与のJavaインターフェースを実装するクラスの場所を確認します…という記述の関連性が分かりません。 一体Commons-Discoveryはどういう働きをするものなのでしょうか?

    • ベストアンサー
    • Java
  • インターフェースでオブジェクトを取得する意味

    http://yukimura1227.blog.fc2.com/blog-entry-49.html 上記ページにSpringを使用したサンプルプログラムがあり試しに動かしてみたのですが 疑問に思ったことがあるので質問させてください。main()関数の中に SearchGoodsService searchGoodsService = appContext.getBean(SearchGoodsService.class); という記述があり戻り値の型はSearchGoodsService(インターフェース)となっています。 ここをインターフェースではなく実装クラスのSearchGoodsServiceImpl ではダメなのでしょうか。 上記ページの下部の方に 「インターフェースを使うのはSearchGoodsServiceImplにプログラムが依存しないようにするためで、 SearchGoodsServiceImplがどう変わろうが、変更の必要がない」 という趣旨の記述があります。 ここで1つ疑問なのですが 戻り値の型が実装クラスの型であっても SearchGoodsServiceImplがどう変更(メソッドが増えたり、減ったり)しても影響がないと思います。 また、戻り値の型がインターフェースであたとしてもSearchGoodsServiceという インターフェース名の変更があった場合、呼び出し元の 全てのプログラムを修正しなくてはならないと思いますがいかがでしょうか。

    • ベストアンサー
    • Java
  • インターフェイスと抽象クラス

    なかなか理解が難しくて苦しんでいます。 で自分なりに理解したのですが、 抽象クラス→内容に決まっているメソッドと決まっていないメソッドがある場合に決まっていないメソッドを あとからオーバーライドするだけでスーパークラスで定義したすべてのメソッドを利用できる。 これでただしいでしょうか? で、インターフェイスなのですが、この抽象クラスとそっくりなんですが、 (1)変数は定数になる(強制static)(2)メソッドは名前のみの宣言(内容は記述できない) と言うことで、かなり???なのです。 何のために・・・???記述するんでしょうか?? ただひとつメリットがあるとしたら、インターフェイスを実装すると、インターフェイスの配列でインスタンスを 生成出来るということぐらいでしょうか。 そこでちょっとお門違いの疑問かもしれないんですが、 Runnable、やMouselistenerはメソッドの内容が書かれていないのに、 なぜ機能を持たせることが出来るのでしょう??? 認識違い、間違い等ありましたら、教えてください よろしくお願いいたします。

    • ベストアンサー
    • Java
  • APIをラップしたクラスの設計と開発

    APIを使用する際、APIの利用部分を1箇所に集めておくために、 ラップするクラスを作った上で、そのラッパー経由でAPIを使用するようにしています。 そのラッパークラスの設計と実装で、わからないことがあります。 下の【1】と【2】を同時に実現しようとしたら、 矛盾してできないようなのです。 【1】 ラッパークラスを作る際、   (1)インタフェースを定義するための基底クラスと、   (2)その基底クラス(インタフェース)を実装する側のクラスを作ろうとしました。 【2】 使うAPI(ミドルウェア)を切り替える可能性があったので、   ・どのようなミドルウェアでも共通に使えるようなインタフェースにしようとしました。 しかし、インタフェースを作ろうとした時点で、 インタフェースとして使われるというか、 引数として渡したり、戻り値として返して貰う「データ型」「クラス」が、 「ミドルウェア」に依存してしまうために、 「基底クラスのインタフェース」にミドルウェア固有の型が入らざるを得ないと感じました。 通常、【1】と【2】は同時には実現できないという認識で良いのでしょうか? また、【1】の基底クラスと実装クラスを分けるということだけを実現しようとするなら、  データ型xを、   #Define WrappedX ラップデータ型X;  #Define WrappedY ラップデータ型Y;  とした上で、基底クラスのインタフェースで登場する、  Inputの型とOutoutの型を、見かけ上、ラップデータ型X、ラップデータ型Y  にすることを考えていますが、  他の開発者の方はどのような方法でクラスの設計・開発をしているのでしょうか? ※引数も、戻り値も、  voidポインタにして、ダウンキャストして、、  ということもできるのかもしれませんが、  その方法はなんだか抵抗を感じますし、自分の力量では不具合があったときに対処できないため、  事実上採用できない感じです。 .

  • 「インタフェースを実装してそれが持つ抽象メソッドをオーバーライドする」

    「インタフェースを実装してそれが持つ抽象メソッドをオーバーライドする」は正しい? はじめまして。Javaのインタフェースに関する質問です。 私はこれまで、インタフェースを使うときは、インタフェースを実装してクラスを宣言し、そのクラス、またはサブクラスでインタフェースがもつすべての抽象メソッドを定義する、と理解していました。 しかし、下の例をみてください。抽象メソッドの定義を、インタフェースの実装の以前で与えています。問題無くコンパイルでき、実行できます。実行結果も以下の通りです。 インタフェースの抽象メソッドへの定義の与え方やその実行のされ方は、メソッドのオーバーライドと同様と思っていましたので、下記のコードでは「クラスBが抽象クラスではありません」や、「インタフェースの抽象メソッドがオーバーライドされていません」などの文法エラーがでると思っていました。 そこで、質問です。 インタフェースが持つ抽象メソッドの定義を与える場所について、または、これに関する説明のあるページなど、何かご存知でしたら教えてください。 ★コード★ interface X{   void show(); } class A{   public void show(){     System.out.println("A");   } } class B extends A implements X{ } public class Main{   public static void main(String[] args){     X x=new B();     x.show();   } } ★実行結果★ >java Main A ★Java環境★ java 1.6.0_21 javac 1.6.0_16

    • ベストアンサー
    • Java
  • インタフェイス実装と抽象クラス継承を同時に使うには??

    私はjava初心者です、今練習問題で困っています。 1つのクラスに抽象クラスとインターフェイスを 実装することはできるのでしょうか? 例えば abstract class Car { private String gas; public void getGas(int gas) { this.gas = gas; } public abstract void enjin(); } interface Flying extends Pet { void show(); } 上のインタフェイスと抽象クラスを同時に下のクラスに継承、実装しよう とすると、どんな風にかけば良いのでしょうか class Zoon { public Zoon() { super(); } public void enjin() { System.out.println("どどどどど"); } public void show() { System.out.println("いいくるまだ"); } }

    • ベストアンサー
    • Java
  • ArrayListのパッケージがlistでない理由

    ・パッケージについて教えてください ■質問1 ・ArrayListのパッケージは、どうして「java.util.List」ではなくて「java.util.ArrayList」なのでしょうか? ・ArrayListは、Listインターフェイス実装クラスなのでListに紐付いている、と思ったのですが… ・「java/util/List.interface」と「java/util/ArrayList.class」は並列の位置づけになるのでしょうか? ・そういう決まりだから? ・Listインターフェイスのパッケージ名は下記で確認するのでしょうか? ・http://docs.oracle.com/javase/jp/7/api/java/util/List.html ■質問2 ・「import java.util.*;」表記ができるなら、全部これで良いようにも思うのですが、どういう風に使い分けるのでしょうか? ・普通はどちらを使う、とかあるのでしょうか?

    • ベストアンサー
    • Java
  • jarファイル内のクラスをインスタンス化する

    http://homepage3.nifty.com/satoshis/java/memo.html#extension 上記のサイトを参考に、jarファイル内のクラスをインスタンス化しようとしているのですが、 clazz.newInstance(); を実行しようとすると、以下のようなエラーが発生します。 java.lang.IllegalAccessException: Class jp.co.AAAAA.BBBBB can not access a member of class CCCCC with modifiers "" at sun.reflect.Reflection.ensureMemberAccess(Reflection.java:57) at java.lang.Class.newInstance0(Class.java:302) at java.lang.Class.newInstance(Class.java:261) at jp.co.loft.LogCut.main(LogCut.java:58) ※jp.co.AAAAA.BBBBB は実行クラス、CCCCCはjarファイル内のクラスです。 開発環境は、以下です。 eclipse2.1.1 + jdk1.5.0_02 どんな些細なことでもよいので、ご存知の方、ご教授願えないでしょうか。 よろしくお願いいたします。

    • ベストアンサー
    • Java
  • Vector、ArrayList、LinkedListについて

    JAVA PRESS vol.26に「Listインターフェースを実装したクラスは ArrayList,LinkedList,Vectorの3種類ですが、Java2ではVectorを 使う意味はほとんどないので、通常は残りの二つのクラスから選択 します」という記述があったのですが、なぜVectorを使う意味が ほとんど無いのでしょう? パっと見た限りVectorはメソッドが多くて使い勝手が良さそうな 便利そうなクラスだと思うし、「同期化」されるというのも 他の2クラスと違う点ですよね? 決して使う意味がない、とは思わないのですが。 みなさんはどうお考えでしょうか? よろしくお願い致します。

    • ベストアンサー
    • Java
このQ&Aのポイント
  • ランニング初心者におすすめのランニングシューズを検討しています。
  • ミズノのウェーブスカイ5SWとアディダスのウルトラブースト系のどちらが良いのか迷っています。
  • クッション性と足への負担軽減を重視しているので、どちらがより満足できる性能を持っているのか教えてください。
回答を見る