• ベストアンサー

インターフェイス同士のキャスト

hiraku-jpの回答

回答No.2

Javaにおける、基本型の変数のキャストと参照型の変数のキャストの違いは理解されていますか? 基本型のキャストが文字通り型を変換するのに対して、参照型のキャストはあくまでインスタンスを指し示す参照変数の型を変換するものであり、指し示すインスタンスがキャストされるわけではありません。 そして、インターフェース型の参照変数が指し示すインスタンスは、必ずそのインターフェースを実装したクラスのインスタンスになります。インスタンスが、自身か継承関係にあるスーパークラスの型の参照変数からしか参照できないのと同じように、自身が実装したインターフェースか、そのインターフェースと継承関係にあるスパーインターフェースの型の参照変数からしか参照できません。 インターフェースの場合はクラスの継承と違い、複数実装できますけどね。これらの関係にあるインターフェース型の参照変数なら、どれでも対象のインスタンスを参照できるので、インターフェース型の参照変数のキャストが成り立つわけですね。 1への回答はこんな感じです。 2への回答は、当然ポリモーフィックな処理を意図してだと思いますよ。 個人的にはJavaのインターフェースは多重継承の問題に対する非常にスマートな解決策だと思ってます。 ・・・これで3への回答も兼ねてしまいましたね。。

ritzsana
質問者

お礼

ご解答誠にありがとうございました。 参考書に インターフェイス→無関係なインターフェイス への参照変数のキャストが可能とあったので混乱していました。 インターフェイス自体の参照変数というのはありえませんよね。 その文章の意図は インターフェイスを実装したクラスの参照変数を無関係なインターフェイスにキャストする、 ということだったの、かな、と思いました。

関連するQ&A

  • インターフェースの利点は?

    Javaを勉強しております。 インターフェースの使い方を知ったのですが、その利点がわかりません。 インターフェースの記述の仕方はクラスによく似ていますが、インターフェースでできること(フィールドやメソッドを書く)はクラスでもできると思います。 インターフェースでしかできないことはあるのでしょうか? インターフェースはどのような場面で活用するのが有効なのでしょうか?

  • Java - インターフェース

    Java初心者です。 インターフェースの勉強中なのですが、いまいちインターフェースの利点、意味が良くわかりません。1つのクラスに複数のインターフェースが使えるとのことですが、普通にクラスに組み込んではダメなのでしょうか? わかりやすく説明してもらえると助かります。

  • インターフェースとは

    業務のフローチャートを書いています。 その注意点で「情報システム間のインターフェースを正確に記述する」というものがあります。 これはどういう意味なのでしょうか。 なお、コンピュータのプログラム等の専門的なものではなく、日常業務のフローチャートです。

  • インターフェースは New 出来ない! の?

    現在 JDKSE 1.3.1 で Java の調査をしています。 Event 関連の調査中に疑問に感じた事が有ります。 下記の件に関し、意見有りましたらよろしくお願い致します。 まずJava 言語の仕様で、「インターフェースはインスタンスを作成できない。」 と有ります。 これはあるサンプルコードからの抜粋です。 内容は、Applet にコマンドボタンコントロールを追加し、クリックされた際の処理を登録しているんですが・・・・・ button.addActionListener(new ActionListener(){..... となっています。 コンパイル成功し、正常に記述されたイベント処理が行われています。 が、addActionListener の引数で渡されている ActionListener はインターフェースですよね? あれっ、違うのかな・・・・ なぜ、new ActionListener()... として引数に渡せるのでしょうか? 現在自身で勉強中なのですが、平行して質問させて頂きました。 よろしくお願い致します。

    • ベストアンサー
    • Java
  • MIDIインターフェースについて

    同じような質問はありましたが、ちょっと違うので新規に質問させていただきます。 当方ワークステーションシンセ(だけの)創作活動からPC上のDAW環境に移転を考えている者です。 SONAR7の説明書やネットで調べて勉強中なのですが、MIDIインターフェースで困ってます。 MIDIインターフェースとは… ”MIDI信号を送受信するための機器である” 漠然としすぎて途方にくれてます…汗 調べたところによると、絶対必要だとか、なければなくてもいいとか、オーディオインターフェースだけでもいいとか、いろいろ意見があって混乱してます。 店舗店員にも「オーディオインターフェースだけでいいよ」と言われました。 質問させていただきたいことは 1. MIDIインターフェースの働きについて教えてください。 (前記のような「信号の送受信」といった定義的なことではなく、「リアルタイム入力をするため」に必要など、具体的なものをお願いします) 2. 「オーディオインターフェースがあればいらない」っていうのはどういう意図なんでしょうか? 3. 私の場合は必要なんでしょうか? ちなみに私のPC環境はWindowsVista Home Premium、メモリ2GB、まだ使ってませんがソフトはSONAR7、オーディオインターフェースはUA-25(MIDI端子あります)です。

  • 面子と書いてキャストと読む?

    ワンピース71巻でルフィとゾロとサンジとフランキーがトレスロザの島に届き4人が先発隊にしてさきに村へ入いる場面があります。だったらすぐ騒ぎをおこす対策のない3人のことに対してフランキーがしょうがないって気持ちで写真のとおりしゃべっているのですがこの「面子」という単語の使い方がよくわかりませんね。 よこに「キャスト」と小さく書いているから何を話すかはわかりますがなぜ「メンバー」とか「がきども」じゃなく「面子」でしょうか?辞書では「面子あそび」とか出ますが意味がぜんぜんあたらないでしょう。

  • IDisposableインターフェースの使い方について

    VB2005で開発しています。 インターフェースの勉強をしているのですが、 うまく理解できない部分がありましたので、質問させて頂きました。 IDisposableインターフェースを実装したところ、 Disposeメソッドとその中に GC.SuppressFinalize(Me) という記述が自動で記載されました。 この「GC.SuppressFinalize(Me)」についての質問です。 これはDisposeメソッドを実行した場合は、 明示的にCOMオブジェクトなどの解放処理が行われるため、 ガベージコレクションの機能を実行しなくて良い ということが書かれていると思って良いのでしょうか? そもそもCOMオブジェクトなどは、 明示的に解放しなければ解放できないため、 ガベージコレクションの機能を実行しないことを明示する必要はないのではないか? と疑問に思ってしまったため、質問させて頂きました。 もし宜しければ、ご回答頂けませんか? 宜しくお願い致します。

  • プログラムの勉強法

    専ら基本情報やシスアド試験用にC,C++,Visual C,Java,などの勉強をしたいのですが、高価なコンパイラーを買わずに、シミュレーション程度でいいから学ぶ方法はないでしょうか。

  • interface,extend,implementのちがい

    お世話になります、 Javaを勉強しているのですが、 interface,extend,implementの使い分けがわかりません。 私の解釈としては、 (1)interfaceは、グローバル変数の定義、グローバルメソッドの定義(実装はしない)。 (2)extendは、extendクラスを親クラスとして親クラスの機能を使用できる。 (3)implementは…,implementもextendと同じような意味だと解釈しているんですが、違う点は、implementで定義してあるメソッドは、使用しなくても、実装しなければならないという点でしょうか? とにかくこの3つのを使い分けるコツとかあれば教えてください。 よろしくお願いします。

    • ベストアンサー
    • Java
  • 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