Java 在类上使用接口

Java 在类上使用接口,java,interface,coupling,Java,Interface,Coupling,对于使用Java类接口的建议,我有点困惑,如以下线程: 我理解您为什么要使用该接口:如果以后发生了更改,您需要清理的代码就更少了 但是,在某些情况下,使用该接口是否会阻止您利用性能优势?您首先选择该特定类的原因是什么 例如,如果我有一个树形图,我假设我最多可以在Ologn中找到任何元素。这就是为什么它有很好的方法,我可以利用像higherEntry,lowerEntry,lastEntry 如果我将这个树状图作为一个映射引用,那么现在我相信我必须在上的列表中一次迭代一个元素来定位那个条目 我是J

对于使用Java类接口的建议,我有点困惑,如以下线程:

我理解您为什么要使用该接口:如果以后发生了更改,您需要清理的代码就更少了

但是,在某些情况下,使用该接口是否会阻止您利用性能优势?您首先选择该特定类的原因是什么

例如,如果我有一个树形图,我假设我最多可以在Ologn中找到任何元素。这就是为什么它有很好的方法,我可以利用像higherEntry,lowerEntry,lastEntry

如果我将这个树状图作为一个映射引用,那么现在我相信我必须在上的列表中一次迭代一个元素来定位那个条目

我是Java新手,如果我在这里遗漏了什么,请告诉我

如果我把这个树形图当作地图来引用,现在我相信我是 在上到中,强制在我的列表中一次迭代一个元素 找到那个条目

不,你不是被迫这样做的。如果您确定地图引用包含对TreeMap的引用,并且希望访问TreeMap的特定方法,则始终可以将地图引用类型转换为TreeMap引用,然后访问适当的方法,如higherEntry、lowerEntry。 但是,唯一需要注意的是,您必须确保映射引用实际上指向树映射,以避免在运行时得到ClassCastException

这意味着,一个超类及其子类本质上是协变的。因此,您可以在它们之间执行强制转换,前提是您在运行时没有违反规则,即超级类引用持有对其他子类实例的引用,而这些子类实例与您要强制转换到的子类不一致

现在以您的示例为例,由于还实现了接口,它是Map接口的子接口,因此您可以使用它来代替Map接口。因此,您可以利用多态性的优势,而无需进行类型转换

如果我把这个树形图当作地图来引用,现在我相信我是 在上到中,强制在我的列表中一次迭代一个元素 找到那个条目

不,你不是被迫这样做的。如果您确定地图引用包含对TreeMap的引用,并且希望访问TreeMap的特定方法,则始终可以将地图引用类型转换为TreeMap引用,然后访问适当的方法,如higherEntry、lowerEntry。 但是,唯一需要注意的是,您必须确保映射引用实际上指向树映射,以避免在运行时得到ClassCastException

这意味着,一个超类及其子类本质上是协变的。因此,您可以在它们之间执行强制转换,前提是您在运行时没有违反规则,即超级类引用持有对其他子类实例的引用,而这些子类实例与您要强制转换到的子类不一致


现在以您的示例为例,由于还实现了接口,它是Map接口的子接口,因此您可以使用它来代替Map接口。因此,您可以利用多态性的优势,而无需进行类型转换。

如果您想使用higherEntry、lowerEntry和lastEntry等方法,那么只需使用NavigableMap接口,而不用Map接口或TreeMap类


一般来说,尽可能多地使用接口,并使用支持所有操作的最通用接口。

如果要使用higherEntry、lowerEntry和lastEntry等方法,则只需使用NavigableMap接口,而不是Map接口或TreeMap类


一般来说,尽可能多地使用接口,并使用最通用的接口来支持您想要使用的所有操作。

这并不能真正回答他的问题。他把这当作一个例子,他没有问题。不,我认为这确实回答了这个问题。NavigableMap似乎兼顾了使用界面的设计目标和性能问题。这并没有真正回答他的问题。他把这当作一个例子,他没有问题。不,我认为这确实回答了这个问题。NavigableMap似乎兼顾了使用接口的设计目标和性能问题。是的,NavigableMap确实提供了所有这些功能。所以,也许在任何情况下,我都可以想象这样的子接口存在?@vmayer。。好吧,你不能从一个案例中推断出所有案例的特定设计。您可能有多个接口来转换类的所有方法,这并不难。但在大多数情况下,是的,这应该是真的。我明白了。是的,NavigableMap确实提供了所有这些功能。所以,也许在任何情况下,我都可以想象这样的子接口存在?@vmayer。。好吧,你不能推断一个党派 所有病例均采用双目立体设计,在一个病例中观察jsut。您可能有多个接口来转换类的所有方法,这并不难。但在大多数情况下,是的,这应该是真的。