【发布时间】:2018-06-30 00:26:10
【问题描述】:
//接口
public interface Singer{
void sing();
}
public interface SongWriter{
void writeSong();
}
//实现
public class PureSinger implements Singer{
void sing(){}
}
public class SingerSongWriter implements Singer, SongWriter{
void sing(){}
void writeSong(){}
}
//客户端代码
void methodA(){
Singer objPureSinger = new PureSinger();
Singer objSingerSWer = new SingerSongWriter();
doSomething(objPureSinger);
doSomething(objSingerSWer);
}
public void doSomething(Singer obj){
obj.sing();
obj.writeSong(); //<--- this does not work.
}
为了实现这种类型的代码,我应该如何设计类结构?
【问题讨论】:
-
目标是用一个单一的基接口/抽象类对象来控制 PureSinger 和 SingerSongWriter 对象。
-
根据你的设计,你应该使用
SingerSongWriter作为doSomething()的参数 -
你希望
doSomething(objPureSinger);做什么? -
那样,我无法将 objPureSinger 传递给 doSomething()
-
@FedericoPeraltaSchaffner 再一次,OP 不希望歌手写歌。相反,OP 希望歌手唱歌,歌曲作者写一首歌。他还想要一个能唱能写歌的唱作人。需要使用单个接口来支持此功能,而
doSomething不会真正担心传递给它的具体类型。我同意Singer接口名称令人困惑,它可以重命名为Artist和doSomething可以采用Artist引用。希望能澄清这个问题。 (我已经在我的回答中介绍了解决方案)
标签: java oop design-patterns polymorphism mixins