说到Java接口实现,我们先来通过一个例子来明确Java中接口的概念,这个例子是"比较",很多对象都可以比较,对于求最大值、求最小值、排序的程序而言,它们其实并不关心对象的类型是什么,只要对象可以比较就可以了,或者说,它们关心的是对象有没有可比较的能力。
Java API中提供了Comparable接口,以表示可比较的能力,但它使用了泛型,而我们还没有介绍泛型,所以本节,我们自己定义一个Comparable接口,叫MyComparable。
现在,首先,我们来定义这个java接口,代码如下:
public interface MyComparable {
int compareTo(Object other);
}
解释一下:
Java使用interface这个关键字来声明接口,修饰符一般都是public。
interface后面就是接口的名字MyComparable。
接口定义里面,声明了一个方法compareTo,但没有定义方法体,接口都不实现方法。接口方法不需要加修饰符,加与不加都是public的,不能是别的修饰符。
再来解释一下compareTo方法:
方法的参数是一个Object类型的变量other,表示另一个参与比较的对象。
第一个参与比较的对象是自己
返回结果是int类型,-1表示自己小于参数对象,0表示相同,1表示大于参数对象
接口与类不同,它的方法没有实现代码。定义一个接口本身并没有做什么,也没有太大的用处,它还需要至少两个参与者,一个需要实现接口,另一个使用接口,我们先来说说如何实现接口:
类可以实现接口,表示类的对象具有接口所表示的能力。我们来看一个例子,以前面介绍过的Point类来说明,我们让Point具备可以比较的能力,Point之间怎么比较呢?我们假设按照与原点的距离进行比较,下面是Point类的代码:
public class Point implements MyComparable {
private int x;
private int y;
public Point(int x, int y) {
this.x = x;
this.y = y;
}
public double distance(){
return Math.sqrt(x*x+y*y);
}
@Override
public int compareTo(Object other) {
if(!(other instanceof Point)){
throw new IllegalArgumentException();
}
Point otherPoint = (Point)other;
double delta = distance() - otherPoint.distance();
if(delta<0){
return -1;
}else if(delta>0){
return 1;
}else{
return 0;
}
}
@Override
public String toString() {
return "("+x+","+y+")";
}
}
我们解释一下:
Java使用implements这个关键字表示实现接口,前面是类名,后面是接口名。
实现接口必须要实现接口中声明的方法,Point实现了compareTo方法。
我们再来解释一下Point的compareTo实现:
Point不能与其他类型的对象进行比较,它首先检查要比较的对象是否是Point类型,如果不是,使用throw抛出一个异常,异常我们还没提到,后续文章讲解,此处可以忽略。
如果是Point类型,使用强制类型转换将Object类型的参数other转换为Point类型的参数otherPoint。
这种显式的类型检查和强制转换是可以使用泛型机制避免的,后续文章我们再介绍泛型。
一个类可以实现多个接口,表明类的对象具备多种能力,各个接口之间以逗号分隔,语法如下所示:
public class Test implements Interface1, Interface2 {
....
}
本文我们通过实例粗浅的了解了Java接口实现的相关知识,实际上Java接口实现是一节需要耗时很长的课程,我们只是刚刚开始,接下来的课程可以到本站的Java零基础入门教程中自主学习,好风凭借力,扬帆正当时,相信你一定能攻克难关,学有所成!
你适合学Java吗?4大专业测评方法
代码逻辑 吸收能力 技术学习能力 综合素质
先测评确定适合在学习