慕姐4208626
这说明了为什么“通过接口引用对象“如上文所述有效Java书。如果您将代码编码到实现中并使用ArrayList(例如,代码中的50个位置),当您找到一个很好的“列表”实现来计算这些项时,您将不得不更改所有这50个位置,而且很可能您将不得不中断您的代码(如果您只使用它,那么没有什么大不了的,但是如果它被其他人使用,您也会破坏他们的代码)通过对接口进行编程,您可以让这50个位置保持不变,并将实现从ArrayList替换为“CountItemsList”(例如)或其他类。下面是一个非常基本的示例,说明如何编写。这只是一个示例,生产准备列表将是多更复杂。import java.util.*;public class CountItemsList extends ArrayList {
// This is private. It is not visible from outside.
private Map count = new HashMap();
// There are several entry points to this class
// this is just to show one of them.
public boolean add( E element ) {
if( !count.containsKey( element ) ){
count.put( element, 1 );
} else {
count.put( element, count.get( element ) + 1 );
}
return super.add( element );
}
// This method belongs to CountItemList interface ( or class )
// to used you have to cast.
public int getCount( E element ) {
if( ! count.containsKey( element ) ) {
return 0;
}
return count.get( element );
}
public static void main( String [] args ) {
List animals = new CountItemsList();
animals.add("bat");
animals.add("owl");
animals.add("bat");
animals.add("bat");
System.out.println( (( CountItemsList )animals).getCount( "bat" ));
}}在这里应用的OO原则:继承、多态性、抽象、封装。