一、接口的概念
接口声明了一组能力,但他自己没有实现这个能力,它只是一个约定。
接口涉及交互两方对象,一方需要实现这个接口,另一方使用这个接口
双方并不依赖,他们只是通过接口间接交互
在Java程序设计语言中,接口不是类,而是对希望符合这个接口的类的一组需求
二、接口的使用
接口使用interface来定义
Java中, 接口和类是并列的两个结构
如何定义接口:定义接口中的成员
JDK7及以前:只能定义全局常量和抽象方法
>全局常量: public static final的.但是 书写时,可以省略不写
>抽象方法: public abstract的
JDK8:除了定义全局常量和抽象方法之外,还可以定义静态方法、默认方法(略)
接口不能定义构造器!意味着不能实例化
Java开发中, 接口通过让类去实现( implements )的方式来使用如果实现覆盖了接口中的所用抽象方法,则此实现类就可以实例化如果实现类没有覆盖接口中所有的抽象方法,则此实现类仍为一个抽象类
三、定义接口
public interface MyComparable{
int compareTo ( Object other );
}
定义接口的代码解释:
1)Java使用interface关键字来声明接口,修饰符一般都是public
2)interfac后面就是接口的名字
3)接口定义里面,声明了一个方法compareTo,但是没有定义方法体
Java8之前,接口内不能实现方法。接口不需要加修饰符,加与不加都是public abstract
compareTo方法解释:
1)方法的参数是一个Object类型的变量other,表示另一个参与比较的对象
2)第一个参与比较的对象是自己
3)返回结果是int类型,-1表示自己小于参数对象,0表示相同,1表示大于参数对象
接口与类不同,它的方法没有实现代码,定义一个接口本身并没有做什么,也没有太大用处,它
还需要至少两个参与者:一个需要实现接口,另一个使用接口
四、实现接口
/**
*代码解释
*1)implements关键字表示实现接口
*2)实现接口必须要实现接口中的声明方法,Point实现了compareTo方法
*/
public class Point implements MyComparable{
private final intx;
private final inty;
public Point ( int x, int y){
this.x=x;
this.y=y;
}
@Override
public String toString(){
return"("+x+","+y+")";
}
@Override
public int compareTo(Object other){
//检查对象是否是Point类型,如果不是使用throw抛出一个异常
if (!(other instanceof Point)){
thrownewIllegalArgumentException();
}
//如果是Point类型将other强制转换成Pointother类型
Pointother Point=(Point)other;
double delta = distance()-otherPoint.distance();
if(delta<0){
return-1;
}elseif(delta>0){
return1;
}else{
return0;
}
}
private double distance(){
return Math.sqrt(x*x+y*y);
}
}
// 一个类可以实现多个接口,表面类的对象具有多种能力,各个接口之间以逗号分隔
public class Point implements MyComparable , MyComparable1{
}
五、使用接口
MyComparable p1 = new Point(2,3);
MyComparable p2 = new Point(1,2);
System.out.println(p1.compareTo(p2));
接口不能直接new, 不能直接创建一个接口对象,对象只能通过类来创建。
但可以声明接口类型的变量,引用实现了接口的类的对象
六、接口细节
接口中的变量
接口中可以定义变量
public interface MyComparable{
public static final int a =0;
int compareTo(Object other);
}
接口的继承
一个接口可以继承其他接口,继承的基本概念与类一样,但与类不同的是接口可以有多个父接口,代码如下所示:
publicinterface IBase1{
void method1();
}
publicinterface IBase2{
void method2();
}
publ icinterface Ichild extends IBase1, IBase2{
}
类的继承与接口
类的继承与接口可以共存,换句话说,类可以在继承基类的情况下,同时实现一个或多个接口
publ icinterface child extends Base implements ICild{
}
关键字extends要放在implements之前
instanceof
与类一样,接口也可以使用instanceof关键字,用来判断对象是否实习了某个接口
if (p instanceof MyComparable){
System.out.println("comparable");
}