接口
接口的使用
-
接口使用interface来定义
-
Java中,接口和类是并列的两个结构
-
如何定义接口,定义接口中的成员
- JDK7及以前:只能定义全局常量和抽样方法
- 全局常量:public static final的(书写时,可以省略不写)
- 抽象方法:public abstract的(书写时,可以省略不写)
- JDK8:除了定义全局常量和抽样方法之外,还可以定义静态方法、默认方法。
- 接口中定义的静态方法只能用接口来调用。
- 实现类的对象可以调用默认方法。
- 如果子类继承的父类和实现的接口中声明了同名同参数的默认方法,那么子类在没有重写此方法的情况下,默认调用父类中的同名同参数的方法。---->类优先原则
- 在实现类中调用接口的方法 接口名.super.方法
- JDK7及以前:只能定义全局常量和抽样方法
-
接口中不能定义构造器!!!意味着接口不能实例化。
-
Java开发中,接口通过让类去实现(implements)的方式来使用
- 如果“实现类”覆盖接口中的所有抽象方法,则此”实现类“就可以实例化
- 如果“实现类”没有覆盖接口中的所有抽象方法,则此“实现类”仍为一个抽象类
-
Java类可以实现多个接口----->弥补了单继承的缺点
格式:class AA extends BB implements CC
-
接口与接口之间可以继承,而且可以多继承。
-
接口的使用,体现了多态性。
-
接口实际上可以看作时一种规范。
为什么要有接口
由于Java中,一个子类只能继承一个父类,但由于实际情况中,为了让一个子类去继承多个父类。于是,就出现了接口,让一个类去实现多个接口。(个人理解)
例题
定义一个接口用来实现两个对象的比较。
interface CompareObject{
public int compareTo(Object o);
//若返回值是 0 , 代表相等; 若为正数,代表当
前对象大;负数代表当前对象小
定义一个Circle类,声明redius属性,提供getter和setter方法
定义一个ComparableCircle类,继承Circle类并且实现CompareObject接口。在
ComparableCircle类中给出接口中方法compareTo的实现体,用来比较两个圆的半
径大小。
定义一个测试类InterfaceTest,创建两个ComparableCircle对象,调用compareTo
方法比较两个类的半径大小。
思 考 : 参 照 上 述 做 法 定 义 矩 形 类 Rectangle 和 ComparableRectangle 类 , 在
ComparableRectangle类中给出compareTo方法的实现,比较两个矩形的面积大小。
package com.yicurtain.Interface;
public interface CompareObject {
public int compareTo(Object o);
}
package com.yicurtain.Interface;
public class Circle {
private double redius;
public double getRedius() {
return redius;
}
public void setRedius(float redius) {
this.redius = redius;
}
public Circle() {
}
public Circle(double redius) {
this.redius = redius;
}
}
package com.yicurtain.Interface;
public class ComparableCircle extends Circle implements CompareObject{
public ComparableCircle(double radius){
super(radius);
}
@Override
public int compareTo(Object o) {
if (this==o){
return 0;
}
if (o instanceof ComparableCircle){
ComparableCircle c=(ComparableCircle) o;
if (this.getRedius()>c.getRedius()){
return 1;
}else if (this.getRedius()<c.getRedius()){
return -1;
}else{
return 0;
}
}else{
// return 0;
throw new RuntimeException("传入的数据类型不匹配");
}
}
}
package com.yicurtain.Interface;
public class interfaceTest {
public static void main(String[] args) {
ComparableCircle c1 = new ComparableCircle(3);
Circle c2= new ComparableCircle(2.2);
int value=c1.compareTo(c2);
System.out.println(value);
}
}