- 締切済み
インターフェイス、列挙型について
インターフェイスにclone()メソッドが無くて気づいたのですが、 インターフェイスはObjectを継承しないのですか? しかしそれ以外のメソッドは定義されていたので、何らかのクラスを継承しているのでしょうか? 列挙型のメンバにもclone() は無かったですけど、別のメソッドは持っていました。 列挙型や、そのメンバもスーパークラスを持っているのですか?
- みんなの回答 (2)
- 専門家の回答
みんなの回答
- kenichiice
- ベストアンサー率72% (27/37)
> 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ではそのようになりました。
- OKwebb
- ベストアンサー率44% (92/208)
> インターフェイスはObjectを継承しないのですか? しません。 Objectクラスはスーパークラスですが、インターフェイスはクラスではありませんから。 > しかしそれ以外のメソッドは定義されていたので、何らかのクラスを継承しているのでしょうか? 何らかのクラスは継承されていませんが、何らかのインターフェイスを継承している可能性はあります。 列挙型とはjava.lang.Enumクラスのことを指してるのでしょうか? よくわからなかったので回答は控えます。
補足
回答ありがとうございます。 インターフェイスはクラスでは無いんですね。それならclone()が無いのは納得です。 Eclipseで作業中、自作の何もメソッドを定義していないインターフェイスに、equals()やwait()があったので疑問に思ったのです。 全てのクラスがObjectを継承するように、どのインターフェイスも必ず持つメンバがあるのかなと思いました。 >列挙型とはjava.lang.Enumクラスのことを指してるのでしょうか? そうです。これもEclipseでEnumの「Enum型名.メンバ名.」と打つと色々メソッドが出てくるので、何処からか継承されてきたのかと思いました。
お礼
>としたとき、関数oreore()内で変数 e に対するメソッドの補完候補には clone() が表示されるのではないでしょうか。 Eclipseでもそのようになりました。 >clone()がprotectedなメソッドだからではないでしょうか。 Enum で試してみた結果、その通りだと思います。 インターフェイス変数に色々なメソッドが定義されていると思っていましたが、その変数にはインターフェイスの実装への参照が入っていたのを忘れていました。それならObjectから継承されたメンバがあるのは当然ですよね。空のインターフェイス変数に対する補完では、class と this があるだけでした。勘違いでつまらない質問をしてしまいました。すいません。 回答ありがとうございました。