###前提・実現したいこと
少し確認したいことがあるので簡単に質問します
interfaceにはgetterやsetterは基本的にはすべきではない(
まだ存在しないフィールドのためのメソッドを用意することになる)ので
getterやsetterが必要になるようなクラスに対しては
「interfaceに対してプログラミングをする」ことはできないと思うのですが
ならば、getterやsetterが必要になるようなクラスに対しては
interfaceをimplementsした抽象クラスにsetterとgetterを追加して
「抽象クラスに対してプログラミングをする」を行えば良いのでしょうか
ご意見をお願いします
###「interfaceに対してプログラミングをする」ことはできないcode
*コンクラスタなどは省く
*Ownerもinterfaceを継承して実装を書くべきだとは思うが省く
interfaceに対してプログラミングをするならば
Ownerクラスにおいて
private Animal dog; とすべきだが
その場合dog.getName()などとはできない
そのため
getterやsetterが必要になるようなクラスに対しては
interfaceをimplementsした抽象クラスにsetterとgetterを追加して
「抽象クラスに対してプログラミングをする」を行えば良いのでしょうか
と質問した次第です
*クラスのフィールドにMap型を採用して全てそこにpropertiesを入れるのであれば
interfaceにgetProperties()やgetProperty(String key)を定義することも可能だと思いますが
java
1public interface Animal{ 2 public void eat(); 3} 4 5 6public class Dog implements Animal{ 7 private String name; 8 9 10 @Override 11 public void eat(){ 12 System.out.println("ガブガブ"); 13 } 14 public String getName(){ 15 return name; 16 } 17 public void setName(String name){ 18 this.name = name; 19 } 20 21} 22 23 24public class Owner{ 25 private Dog dog; 26 /**/ 27 /*略*/ 28}
追記
interfaceの利用方法・手順ではなく作法としてどうなのかということについてお聞きしたいです
「interfaceに対してプログラミングをする」とは
あるinterfaceを継承したクラスAを利用するクラスBは
classAではなくそのinterfaceに対してプログラミングをするという意味です
逆に「実装に対してプログラミングしてはならない」なども書籍で数回目にしたのでテクニカルタームとしては一般的なのかと認識していました
回答2件
あなたの回答
tips
プレビュー