1.接口不提供任何函数,它们只是定义在它提供的术语类的大致profile。但里面没有代码
2. 正确的,我们需要的接口,当我们有课。
3.
4. 答案是你的问题;
SortedMap
/SortedSet
那如何真正实现这一函数。 而作为事实上,你经常可以有多种方式来实现函数。想想接口java.util.Set
:你可以把它作为一个TreeSet
也可作为HashSet
。通常情况下,有不同的HashSet的权衡可能提供平均更快的访问,而树集可能是在保持其项目的顺序更好。 往往不够,但是,开发人员并不真正关心细节 CodeGo.net,只要他们知道他们可以存放物品在一组,并检索它们。这个基本的想法,但不知道如何去实现它,是由接口定义。 这也是你不能实例化一个接口的原因。如果您尝试以下操作:
SortedSet<Integer> set = new SortedSet<Integer>();
这就是“SortedSet的”并没有真正意识到了一套本身,它只是定义了一个有序集合的一个必须条件提供 下面是一个人为的例子。想象一下,你想提供一个函数正整数的集合中的百分比。你可以定义
public double getPercentageOfPositives(Set<Integer> set) {
if (set.size() == 0) {
return 0.0;
}
int count = 0;
for (Iterator<Integer> iter = set.iterator(); iter.hasNext();) {
if (iter.next() > 0) count++;
}
return 100.0 * count / set.size();
}
在这里,你真的不关心是否给你一个TreeSet
或HashSet
。这并不重要原则render你只是调用size()
方法和iterator()
方法反正。所有你需要的是一个事实,即任何一组都将具有这些接口给你, 因此,签名只要求一Set
,这是定义所有的类必须提供(其中包括)一个接口size()
和iterator()
方法。如果你写的是这样的:
public double getPercentageOfPositives(SortedSet<Integer> set) {
...
}
我有一个实例HashSet
然后我忍不住“即使HashSet
提供size()
和iterator()
为好。 :-( 在这个意义上,一个接口就好像是超一流的,它定义了所有的类都必须有它。但它并没有提供任何函数本身。 要回到你原来的例子SortedSet
:这个接口不提供任何函数。定义了一个有序set必须提供。TreeSet
是这样的 思路适用于SortedMap
。 2. 正确的,我们需要的接口,当我们有课。
SortedMap
和SortedSet
定义函数,它是用树TreeMap
和TreeSet
。 3.
SortedMap
/SortedSet
界面,所以你不能实例化它们。TreeMap
/TreeSet
是类和可实例化的原因,为什么我们需要SortedMap
/SortedSet
是,有可能比Sun的基于树的人除外。 4. 答案是你的问题;
SortedMap
和SortedSet
是接口。他们和属性,但他们实际上没有他们,所以他们不提供任何函数。TreeMap
和TreeSet
这些接口。 你的代码来介面好的OOP设计实践,而不是所有的签名应该是指接口而不是类。 所以,你会怎么做:
Object squishObjects(SortedMap map);
而不是 对象squishObjects(TreeMap中映射); 这样一来,如果有更好的SortedMap
同时,你可以切换,在,而不必修改所有这一切依赖于TreeMap
。