当前位置: 技术问答>java相关
接口奇怪的用法????????????
来源: 互联网 发布时间:2015-10-10
本文导语: //: SortVector.java // A generic sorting vector import java.util.*; interface Compare { boolean lessThan(Object lhs, Object rhs); boolean lessThanOrEqual(Object lhs, Object rhs); } public class SortVector extends Vector { private Compare compare;...
//: SortVector.java
// A generic sorting vector
import java.util.*;
interface Compare {
boolean lessThan(Object lhs, Object rhs);
boolean lessThanOrEqual(Object lhs, Object rhs);
}
public class SortVector extends Vector {
private Compare compare; // To hold the callback
public SortVector(Compare comp) {
compare = comp;
}
public void sort() {
quickSort(0, size() - 1);
}
private void quickSort(int left, int right) {
if(right > left) {
Object o1 = elementAt(right);
int i = left - 1;
int j = right;
while(true) {
while(compare.lessThan( //here
elementAt(++i), o1))
;
while(j > 0)
if(compare.lessThanOrEqual( //here
elementAt(--j), o1))
break; // out of while
if(i >= j) break;
swap(i, j);
}
swap(i , right);
quickSort(left, i-1);
quickSort(i+1, right);
}
}
private void swap(int loc1, int loc2) {
Object tmp = elementAt(loc1);
setElementAt(elementAt(loc2), loc1);
setElementAt(tmp, loc2);
}
} ///:~
请问接口Compare 起什么作用?
thanks
// A generic sorting vector
import java.util.*;
interface Compare {
boolean lessThan(Object lhs, Object rhs);
boolean lessThanOrEqual(Object lhs, Object rhs);
}
public class SortVector extends Vector {
private Compare compare; // To hold the callback
public SortVector(Compare comp) {
compare = comp;
}
public void sort() {
quickSort(0, size() - 1);
}
private void quickSort(int left, int right) {
if(right > left) {
Object o1 = elementAt(right);
int i = left - 1;
int j = right;
while(true) {
while(compare.lessThan( //here
elementAt(++i), o1))
;
while(j > 0)
if(compare.lessThanOrEqual( //here
elementAt(--j), o1))
break; // out of while
if(i >= j) break;
swap(i, j);
}
swap(i , right);
quickSort(left, i-1);
quickSort(i+1, right);
}
}
private void swap(int loc1, int loc2) {
Object tmp = elementAt(loc1);
setElementAt(elementAt(loc2), loc1);
setElementAt(tmp, loc2);
}
} ///:~
请问接口Compare 起什么作用?
thanks
|
这是java多型性的一种体现。要实现接口中的方法,你还要定义一个类,如:
class A implements Compare{
//必须实现来自接口的方法:
boolean lessThan(Object lhs, Object rhs){
...//具体代码
}
boolean lessThanOrEqual(Object lhs, Object rhs){
...//具体代码
}
}
那么你就可以将A作为一个Compare用到SortVector 里面去了。但是实际上你可能不只是用A所实现的方法解决你所有的问题,还有其它的比较,你只要再定义一个实现Compare接口的类B,由于SortVector 中声名的是Compare,A和B都是Compare,所以你的SortVector 类的代码就不用改变就可以直接达到你的目的,达到代码重用的目的了,你说有好处吗?
class A implements Compare{
//必须实现来自接口的方法:
boolean lessThan(Object lhs, Object rhs){
...//具体代码
}
boolean lessThanOrEqual(Object lhs, Object rhs){
...//具体代码
}
}
那么你就可以将A作为一个Compare用到SortVector 里面去了。但是实际上你可能不只是用A所实现的方法解决你所有的问题,还有其它的比较,你只要再定义一个实现Compare接口的类B,由于SortVector 中声名的是Compare,A和B都是Compare,所以你的SortVector 类的代码就不用改变就可以直接达到你的目的,达到代码重用的目的了,你说有好处吗?
|
接口是常量值和方法定义的集合。
|
接口Compare在这里只是起到定义两个方法, 以便后面的程序实现这两个方法.