实例分析Java接口实现 - 极悦
首页 课程 师资 教程 报名

实例分析Java接口实现

  • 2020-10-16 17:35:20
  • 1204次 极悦

说到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大专业测评方法

代码逻辑 吸收能力 技术学习能力 综合素质

先测评确定适合在学习

在线申请免费测试名额
价值1998元实验班免费学
姓名
手机
提交