質問: 関数型インターフェースについての質問です。 現在ラムダ式についての学習をしているのですがラムダ式を利用できると認識していますがこの関数型インターフェースの条件というものにあまりピンときていません。 1. 抽象メソッドを1つしか持たないインターフェースであること。 2. この際、Staticメソッドやdefaultメソッドに関しては含んでいても問題ないということ。 3. Objectクラスにあるpublicメソッドがインターフェース内に抽象メソッドとして定義されている場合、そのメソッドも無視されるということ。 上のリストの1と2は理解できるのですが3がさっぱりわかりませんどなたかわかりやすく教えていただけると幸いです。
回答: 例えば、こんなインタフェース。 ``` interface Test { void test(); String toString(); } ``` 抽象メソッドが2つあるので、関数型インタフェースにならなさそうですが、2つ目のメソッド`toString()`はObjectクラスにpublicメソッドとして定義されています。そのため、これは抽象メソッドとしてカウントされず、関数型インタフェースという扱いになります。 インタフェースを実装して使う場面を考えると、必ずクラスに実装し、クラスは必ずObjectを継承します。そして、Objectクラスでは必ずtoStringメソッドが具象メソッドとして存在します。したがって、Objectクラスで定義されているpublicメソッドと同じシグネットを持つメソッドは、インタフェースの抽象メソッドとしては意味がないので、カウントしないのです。