• 締切済み

インターフェイス、列挙型について

インターフェイスにclone()メソッドが無くて気づいたのですが、 インターフェイスはObjectを継承しないのですか? しかしそれ以外のメソッドは定義されていたので、何らかのクラスを継承しているのでしょうか? 列挙型のメンバにもclone() は無かったですけど、別のメソッドは持っていました。 列挙型や、そのメンバもスーパークラスを持っているのですか?

  • Java
  • 回答数2
  • ありがとう数1

みんなの回答

回答No.2

> Eclipseで作業中、自作の何もメソッドを定義していないインターフェイス > に、equals()やwait()があったので疑問に思ったのです。 > 全てのクラスがObjectを継承するように、どのインターフェイスも必ず持 > つメンバがあるのかなと思いました。 型がインタフェースの変数に対してEclipseがメソッドの補完候補としてequals()は表示するのにclone()は表示しないのは、clone()がprotectedなメソッドだからではないでしょうか。 インタフェースはpublicなメソッドしか持てないので、型がインタフェースの変数に対してclone()が候補として表示されることはなさそうに思います。 が、Enumに対しては、そのEnumのprotectedなメソッドへアクセス可能な文脈ではclone()が候補として表示されるだろうと思います。 public enum OreEnum { ORE; void oreore() { OreEnum e; } } としたとき、関数oreore()内で変数 e に対するメソッドの補完候補には clone() が表示されるのではないでしょうか。 手元にEclipseは無いので確かめられませんが、NetBeansではそのようになりました。

asasho321
質問者

お礼

>としたとき、関数oreore()内で変数 e に対するメソッドの補完候補には clone() が表示されるのではないでしょうか。 Eclipseでもそのようになりました。 >clone()がprotectedなメソッドだからではないでしょうか。 Enum で試してみた結果、その通りだと思います。  インターフェイス変数に色々なメソッドが定義されていると思っていましたが、その変数にはインターフェイスの実装への参照が入っていたのを忘れていました。それならObjectから継承されたメンバがあるのは当然ですよね。空のインターフェイス変数に対する補完では、class と this があるだけでした。勘違いでつまらない質問をしてしまいました。すいません。 回答ありがとうございました。

  • OKwebb
  • ベストアンサー率44% (92/208)
回答No.1

> インターフェイスはObjectを継承しないのですか? しません。 Objectクラスはスーパークラスですが、インターフェイスはクラスではありませんから。 > しかしそれ以外のメソッドは定義されていたので、何らかのクラスを継承しているのでしょうか? 何らかのクラスは継承されていませんが、何らかのインターフェイスを継承している可能性はあります。 列挙型とはjava.lang.Enumクラスのことを指してるのでしょうか? よくわからなかったので回答は控えます。

asasho321
質問者

補足

回答ありがとうございます。 インターフェイスはクラスでは無いんですね。それならclone()が無いのは納得です。 Eclipseで作業中、自作の何もメソッドを定義していないインターフェイスに、equals()やwait()があったので疑問に思ったのです。 全てのクラスがObjectを継承するように、どのインターフェイスも必ず持つメンバがあるのかなと思いました。 >列挙型とはjava.lang.Enumクラスのことを指してるのでしょうか? そうです。これもEclipseでEnumの「Enum型名.メンバ名.」と打つと色々メソッドが出てくるので、何処からか継承されてきたのかと思いました。

関連するQ&A

  • なぜインタフェースを使うのか?

    カテゴリはJavaですが、オブジェクト指向という観点での質問です。 私はオブジェクト指向を勉強中です。(C#) そこで、疑問に思ったのがタイトルで示したインタフェースについてです。 以下に疑問を列挙します。 1.インタフェースはなぜ使うのですか? 2.使うメリットはなんですか? 3.インタフェースのインスタンスって作れるのですか? 4.インタフェースは必ずどこかのクラスに継承されないといけないのですか?  単体では何もできないのですか? 5.具体的な使い方を教えてください。 全部でなくてもよいのでわかる方ご教授よろしくお願いいたします。

    • ベストアンサー
    • Java
  • インターフェイスの使い方がわかりません(初心者です)

    Javaを始めたばかりの初心者です。 「やさしいJava」を買って一通り学んだのですが、 インターフェイスの使い方がよくわからず、困っています。 インターフェイスを実装することでインターフェイスが持つメソッドがすべて定義されてることが保障される、 というのはわかるんですが、そのことがどうして有用なのでしょう? また、具体的にはスレッドを扱うときにRunnableインターフェイスを実装する理由がわかりません。 Threadクラスのオブジェクトを作成するときに、 Runnableを実装したクラスのオブジェクトの変数を 引数にしないといけないんですよね? このとき、Runnableインターフェイスが 「runメソッドが定義されていなければならない」 とだけいうものだったとしたら、 Runnableを実装してなくてもrunメソッドさえ定義してあれば 実行できそうな気がするんですが・・・

    • ベストアンサー
    • Java
  • インターフェースってズバリ何なんでしょうか?

    最近DirectX9をやってます。 始める→挫折→C++をもう一度勉強→また始める という状況で、だいたいのことは分かってきたのですが、 IDirect3D9というのがいまいち分かりません。 インターフェースというのは私の中では、「関数をたくさん定義して、継承させるためのもの」という適当な認識をしているのですが、 IDirect3D9インターフェースは、インスタンス化されていますし、これを継承したクラスは使いませんし、普通にメンバ関数を扱っています。 いったい、インターフェースとは何なのでしょうか? また、IDirect3D9インターフェースは、何故インターフェース何でしょうか? 是非ご教授ください。

  • Interface変数について

    C#勉強初めて間もない者です。 Interfaceについて教えて頂きたい事あります。 Interfaceとは規約を定める為のクラスで、メソッドは定義してあるだけで中身はそのInterfaceを継承したクラスで実装する物だと認識しています。 そこで以下のようなコーディングに出会い混乱しました。。。 IList loList = "22,22,".Split(','); ※へたくそな例ですがお許し下さい 上記のコーディングで、中身のないインターフェイスのloList変数が何故抽象メソッドして定義されている「Add」やプロパティ「Count」が使えるようになるのでしょうか? ご質問に答えて下さる方いらっしゃいましたら宜しくお願いします。

  • 【C#】内部だけで有効なインターフェースを作りたい

    C#2005でコンポーネントを作ろうと思っています。 そこであらゆるコンポーネントに共通な内部インターフェースが存在し、 更にはコンポーネントはいくつかの種類のコンポーネントを継承したいです。 不可能なコードで記すと、このようなことがしたいです。 【拡張TextBox】 public class ExTextBox : AbstractTextBox { } 【抽象TextBox】 public abstract class AbstractTextBox : TextBox, ICommonControl {  public AbstractTextBox() {   _ifMethod();  }  private void _ifMethod() {  ←これ   // 処理  } } 【内部インターフェース】 public interface ICommonControl {  void _ifMethod(); } インターフェースはpublic宣言以外定義が行えず、内部で利用される インターフェースとしては使えません。 別にインターフェースをそのまま実装すれば出来なくはないですが、 外部にインターフェースを実装したメソッドが見えるのはマズいです。 もしくは多重継承的なことが出来れば解決すると思うのですが・・・。 コンポーネントを継承する関係で、直前のクラスはTextBoxやLabelなどと いったクラスを継承するしかない為、それ以外の内部部分を共通化 したい場合に、どうすればいいのか分かりません。 実現させる方法が思いつかない為、何かシンプルな一例をご提示 頂けないでしょうか?

  • RequestDispacherインターフェイスのことを知っている方がいたら・・

    マニアックな質問なのかもしれませんが・・ インターフェイス及び抽象メソッドの定義は ●インターフェイスに定義されているメソッドは必ず抽象メソッドである ●抽象メソッドにはメソッドのプロトタイプだけが定義されている だと思うのですが、 RequestDispatcherインターフェイスのforwardメソッドには既に 「サーブレットから他のリソースへ、requestオブジェクトとresponseオブジェクトを転送する」 という処理内容が定義されているように思います。>java.sun.comのapiドキュメント これってインターフェイスの原則から外れていると思うのですが、 どうなのでしょうか。「例外」もあるってことなんでしょうか。 おひまだったら解答をお願いいたします。

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

    いまサーブレットをやっています。 Java言語仕様では、 「インターフェースの定義には、メソッドの定義を書いてはいけない」 (メソッドの定義はそのインターフェースをimplementsしたクラスのなかで オーバーライドする) ということになってますよね? …でも、 APIリファレンスを読むと、 インターフェースHttpServletRequestのメソッドgetParameterには、 「リクエストパラメータの値をString型として返す」と書かれています。 ↑これって上記のJava言語仕様と矛盾してませんか? まるでどこかでgetParameterメソッドの定義がなされているかのようです。 これってどういうことでしょう? 考えれば考えるほど、訳わかりません。とっても混乱中です(-_-)

    • ベストアンサー
    • Java
  • インタフェースとは

    インタフェースとはメソッドをのみを定義してある抽象クラスようなものということですが、具体的にどのようなときに役立つのでしょうか? ご存知の方、宜しくお願いします。

    • ベストアンサー
    • PHP
  • PHPでの継承について

    PHPの継承についての質問です。 PHPではクラスを継承する場合 スーパークラスのpublicとprotectedなメンバを継承すると いいます。 継承とは、スーパークラスで定義したメンバが サブクラスで定義されたことと同義である。 という前提で質問します。 ひょっとしたらこの前提も微妙に間違っているかもしれません。 以下の用なコードがあるとします。 <?php class AClass { //サブクラスへ継承されるスーパークラスのメソッド public function superClassPublicMethod(){ //【1】 $this-> subClassPrivateMethod(); } } class BClass extends AClass{ public function subClassPublicMethod(){//【2】 $this->subClassPrivateMethod(); } //継承したスーパークラスで定義されているメソッドからコールするサブクラスで定義したメソッド private function subClassPrivateMethod(){ //【3】 print __CLASS__; } } $obj = new BClass(); //サブクラスで定義した public なメソッドを実行 $obj->subClassPublicMethod(); //【4】 //スーパークラスから継承したpublic なメソッドを実行 $obj-> superClassPublicMethod();//【5】 ?> コレを実行すると【4】はきちんとBClassという結果が返ってきます。 ところがその下の【5】を実行すると Fatal error: Call to private method BClass::subClassPrivateMethod() from context 'AClass' in /usr/local/apache/htdocs/ext06.php on line 9 という実行時エラーが返ってきます。これを読むと、AClassのコンテキスト内ではBClassのprivateなメンバは コールできませんよ。というエラーですね。そもそもAClassのコンテキストということは、これはAClass内で実行されているということですよね? ここで、スーパークラスからこのpublicなメソッドは継承しているはずなのになぜ、サブクラスのBCLass内ではなくスーパークラスのAClass内という エラーが返っているのでしょうか? 継承とは、サブクラスで定義したと同義ではなく、スーパークラスまで内部的にアップキャスト?してコールしにいっているのでしょうか? 詳しい方ご教授ください。 よろしく御願いします。

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

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

    • ベストアンサー
    • Java

専門家に質問してみよう