编辑:对我的问题的简单回答是,Java允许一个接口扩展多个其他接口。这就回答了我的逻辑问题,即如何在公共接口中将接口分组在一起。这个答案没有出现在受骗问题中。问题也不同,它不是关于创建接口组的。
在Java中,有什么原因不能将一个接口定义为实现其他接口?我看到并不满意的答案是“接口本身不包含实现,那么一个接口如何实现其他接口呢?”嗯,在我看来,这是一个很弱的答案,因为它更多地是对英语语义的认可,而不是对场景的逻辑解释。对该场景的逻辑解释是,既然我们可以定义类来实现许多接口,为什么我们不能定义一个本身代表接口集合的接口。
假设您有许多类,每个类都要实现一个由多个接口组成的大型公共集合。按照目前的情况,您必须显式地写出每个类的列表。这意味着,如果以后您必须将另一个接口添加到您的多个接口列表中,则必须修改每个类。将所有接口合并到一个“超级接口”中将允许程序员只在一个地方进行更改。
在回答“创建一个实现接口列表的抽象超类,并让所有的子类扩展该超类”之前,请记住,您不能假设这些类还没有扩展类。implements关键字的全部好处之一是,您可以在不更改其分类的情况下调整类,对吧?
我想长话短说是:为什么程序员不能定义只是一组其他接口的接口呢?或者,也许更好的问题是:如果我不能将一个接口定义为实现其他接口,我如何定义其他接口的组的接口?
对于那些更喜欢代码的人,我想问的是为什么不这样做……
public class Foo extends ParentClass1 implements IBar1, IBar2, IBar3{
}
public class Baz extends ParentClass2 implements IBar1, IBar2, IBar3{
}...让Java允许这样做不是更有意义吗:
public interface IAllBar implements IBar1, IBar2, IBar3{
}
public class Foo extends ParentClass1 implements IAllBar{
}
public class Baz extends ParentClass2 implements IAllBar{
}这样,以后如果我创建了IBar4,我只需要修改IAllBar.java,而不是修改Foo.java和Baz.java。
编辑:根据下面的回答,我可以定义IAllBar来扩展所有这些接口,这样我就可以得到我想要的东西了。我很高兴有些人愿意阅读整个帖子,然后跳到底部发布刻薄的回复。
发布于 2013-06-26 12:58:11
您可以定义一个接口,它是其他接口的集合。它被称为扩展接口。您可以扩展多个接口。
至于为什么不能在接口中定义方法,这就是Java接口是如何定义的。你所说的问题就是单一继承的后果。
但是,您会很高兴地知道,在即将发布的新Java8中,有一个称为虚拟扩展方法的特性,它解决了您所说的大型代码库问题。
就我个人而言,我认为它在遗留代码库中对于快速重构很有用,但如果系统设计良好,您应该能够在以后摆脱默认实现。过度使用此功能只会导致多重继承的所有缺点。
发布于 2013-06-26 13:26:10
接口不能实例化-它们只能由类实现或由其他接口扩展。
我相信你应该做的是扩展接口。
您可以这样做,如下所示:
public interface ManBearPig implements Man, Bear, Pig {
//interface body
}然后,您可以在需要的地方实现ManBearPig。
你需要记住的是接口支持多重继承。
要理解这一点,请考虑这样一个想法:接口Man、Bear和Pig可能都包含了方法walk()。
如果要在类中实现ManBearPig并调用walk()方法,它将同时实现人、熊和猪的walk方法。
https://stackoverflow.com/questions/17311738
复制相似问题