你好,我是C#程序员,这个视频提到Java无法实现接口组合?应该不会吧
来源:6-5 接口的组合

慕瓜8195663
2020-05-14
// C#的接口可以再继承多个接口来达到组合的效果,并且也带智能提示,
// 我的问题是,这节课是不是在讲这个宗旨?
// 接口一
public interface IRetriever
{
void Get(string url);
}
// 接口二
public interface IPoster
{
void Post(string url, Dictionary<string, string> );
}
// 组合接口
public interface IRetrieverPoster : IRetriever, IPoster
{
}
// 实现接口
public class MockRetriever : IRetrieverPoster
{
public void Get(string url)
{
// implement
}
public void Post(string url, Dictionary<string, string> )
{
// implement
}
}
const string url = "https://www.moc.com";
// 利用接口限制类型能力
string Download(IRetrieverPoster retrieverPoster)
{
retrieverPoster.Get(url);
retrieverPoster.Post(url, new Dictionary<string, string> {
{ "contens","author fake " },
{ "sxx","xx" },
});
return "ok";
}
// 最后使用特定的实现来提供不同能力的实现
public void Get()
{
IRetrieverPoster s = new MockRetriever();
Download(s);
}
写回答
2回答
-
如果我们有public class RealRetriever : IRetriever, IPoster
那么这个RealRetriever就不能当作IRetrieverPoster来使用。这样的直接坏处是:如果我们无法修改RealRetriever的话,就需要为RealRetriever写个adapter。也许写一个adapter没什么大不了,但这里体现的点是代码和模型有了脱节。我们的模型是需要一个既可以Retrieve又可以Post的“东西”,我们也有这么一个东西在手上,就是RealRetriever,但是因为语言的限制没法直接拿来用。
再回到go语言说到这种隐式实现接口到底有什么好处是什么的话,我们要往大了看,就是看到duck typing的好处。这我们的确很难靠“想”来理解。我们可以打一个问号,在今后的项目实践中不断去体会duck typing带来的优缺点。
012020-06-07 -
慕瓜8195663
提问者
2020-05-15
我的理解是c#跟java一样不是duck typing ,外面的实现类必须明确继承接口,可是如果只是这样的话,想不通不继承接口有什么好处
00
相似问题