質問: name; } } public class Owner{ private Dog dog; /**/ /*略*/ } ``` 追記 --- interfaceの利用方法・手順ではなく作法としてどうなのかということについてお聞きしたいです 「interfaceに対してプログラミングをする」とは あるinterfaceを継承したクラスAを利用するクラスBは classAではなくそのinterfaceに対してプログラミングをするという意味です 逆に「実装に対してプログラミングしてはならない」なども書籍で数回目にしたのでテクニカルタームとしては一般的なのかと認識していました interfaceに対してプログラミングをする
回答: > > interfaceにはgetterやsetterは基本的には定義できない(すべきではない)ので > > 「interfaceに対してプログラミングをする」ことはできないと思うのですが > > > interfaceに対して実装はできませんが、宣言はできます。 例えば、インタフェース Collectionには反復子を取得するiterator()という(抽象)メソッドが宣言されています。 宣言することを「プログラミングをする」ことに含めるなら、できることになります。 お気づきのように、(抽象)メソッドはその実体を持たないので、そのinterfaceをimplementsした(抽象または具象)クラスがメソッドを(追加して)オーバーライドして実体を定義することになります。ただし、抽象クラスの場合、interfaceの(抽象)メソッドを抽象メソッドのままにしておくこともできます。 抽象クラスは抽象メソッドを1つ以上持ったクラスですが、具象メソッドを持つこともできます。 いずれにせよ、interfaceで宣言したメソッド(自動的に抽象メソッドになります)はクラスでオーバーライドして実体を定義することになります。