何か分からないけど文字列を返します。toString();}次に、このインタフェースを実装したInheritedFromObjectクラスを作ります。HasToStringInterfaceインタフェースの実装クラス。HasToStringInterfaceインタフェースの実装クラス。中身ナシ!}このクラス、HasToStringInterfaceインタフェースを実装しておきながら、toString()メソッドを実装していません。このクラスはこれでちゃんと使えます。いうと、InheritedFromObjectクラスは自動的にObjectクラスから継承していて、そのObjectクラスがtoString()メソッドを持っているからです。Objectクラスってなに?」で説明したとおり、すべてのクラスはObjectクラスのサブクラスになるため、InheritedFromObjectクラスも自動的にObjectクラスのサブクラスになります。toString()」メソッドを持っています。これが、HasToStringInterfaceインタフェースのtoString()メソッドの実装になります。これまでは、抽象メソッドの実装は、実装先のクラスで作っていました。実は、スーパークラスに抽象メソッドと同じ名前・引数のメソッドがあればそれで実装できちゃうんです。InheritedFromObjectクラスのインスタンスを作ってみましょう。InheritedFromObjectクラスのインスタンスを1つ作ります。参照型変数の型はHasToStringInterfaceインタフェースです。InheritedFromObjectクラスのインスタンスを1つ作ります。参照型変数の型はHasToStringInterfaceインタフェースです。InheritedFromObject();InheritedFromObjectクラスのインスタンスが作られると、そのインスタンスの中に、Objectクラスのインスタンスと、HasToStringInterfaceインタフェースが含まれます。この時、HasToStringInterfaceインタフェースのtoString()メソッドは、ObjectクラスのtoString()メソッドにひもを付けます。インスタンスの中のインタフェースこの時、インタフェースはインスタンスを作りません。「インタフェース」としてインスタンスの中に入っています。インタフェースはフィールドもメソッドも持ちません。そのため、「インスタンスを作ってその中にフィールドやメソッドを入れる」ということをする必要がありません。インタフェースは入れる物がないんです。普通のクラスが持つフィールドやメソッドといった「インスタンスの中に入れる物」が、インタフェースにはないんです。インタフェースは抽象メソッドを持っています。この抽象メソッドは中身がありません。何のためにあるかというと、単に実装メソッドにひもを付けているだけです。ひもそのものと言ってもいいかもしれません。インタフェースはメソッドにひもを付けるためのものなのです。そのため、新しくメソッドを作らなくても、このようにスーパークラスのメソッドにひもを付けることができ、インタフェースを通してそれを呼び出すことができるわけです。toString()メソッドを呼び出します。toString()メソッドを呼び出します。(値は毎回変わります)インタフェースの参照型変数の抽象メソッドを呼び出すと、ひもが付いている実装メソッドが呼び出されます。インタフェースを実装したことで、そのひもを通して操作ができるようになったわけです。インタフェースを通して呼び出すこのように、インタフェースは単なるひも。実装したメソッドを呼び出すためだけのものです。インタフェースは「中身」がなく、そのためインスタンスを作る必要がありません。インスタンスを持たず、ただひもだけ付けるわけです。2つのクラスをくっつけられる?」で、クラスは「2つのクラスから1つのクラスを作れない」ということを説明しました。インタフェースにその制約がないのは、この「中身がない」という特徴が理由です。多重継承したクラスは、インスタンスの中にいろんなインスタンスがごちゃ混ぜに入って、その管理が難しくなります。インタフェースはいくら実装しても問題ありません。そのインスタンスがないんですから。いくらインタフェースを実装しても、「フィールド重複してるんじゃね?」「どのフィールドを使う?」「どのメソッドが呼び出される?」といった問題がインスタンスを作らないため起きません。インタフェースを実装すると、ただひもが付けられるだけ。抽象メソッドは実装メソッドと見た目(名前・引数)が同じなので、いくら抽象メソッドが増えてひもが増えても、実質なにも増えたことにはならないのです。実装しても大丈夫、というわけです。ちなみに、インタフェースの抽象メソッドが自動的にpublicになるのは、これが理由です。インタフェースの抽象メソッドは「外から呼び出せるようひもを付ける」ためのものです。外から呼び出す、という目的のため自動的にpublicが付いているわけです。中身がなく、ただ外から呼び出すためだけの機能、それがインタフェースというわけです。オブジェクト指向とJavaこのページは、Java言語を用いたオブジェクト指向プログラミングのチュートリアル解説を行う「Javaのオブジェクト指向入門」の一ページです。詳しい説明は「Javaのオブジェクト指向入門」目次をご覧ください。