实例分析Java接口实现

1099 篇文章 1 订阅
1030 篇文章 9 订阅
本文通过一个比较的例子介绍了Java中的接口概念,以自定义的MyComparable接口和Point类来展示如何实现接口。Point类实现了MyComparable接口,使得Point对象能够进行距离比较。文章还强调了接口的作用在于定义能力,而具体的实现则由类来完成,同时预告了后续会介绍泛型和异常处理等主题。
摘要由CSDN通过智能技术生成

说到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(xx+yy);

}

@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 {

}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值