首页 > 技术文章 > 接口

yicurtain 2021-06-05 17:51 原文

接口

接口的使用

  1. 接口使用interface来定义

  2. Java中,接口和类是并列的两个结构

  3. 如何定义接口,定义接口中的成员

    1. JDK7及以前:只能定义全局常量和抽样方法
      • 全局常量:public static final的(书写时,可以省略不写)
      • 抽象方法:public abstract的(书写时,可以省略不写)
    2. JDK8:除了定义全局常量和抽样方法之外,还可以定义静态方法、默认方法。
      • 接口中定义的静态方法只能用接口来调用。
      • 实现类的对象可以调用默认方法。
      • 如果子类继承的父类和实现的接口中声明了同名同参数的默认方法,那么子类在没有重写此方法的情况下,默认调用父类中的同名同参数的方法。---->类优先原则
      • 在实现类中调用接口的方法 接口名.super.方法
  4. 接口中不能定义构造器!!!意味着接口不能实例化。

  5. Java开发中,接口通过让类去实现(implements)的方式来使用

    1. 如果“实现类”覆盖接口中的所有抽象方法,则此”实现类“就可以实例化
    2. 如果“实现类”没有覆盖接口中的所有抽象方法,则此“实现类”仍为一个抽象类
  6. Java类可以实现多个接口----->弥补了单继承的缺点

    格式:class AA extends BB implements CC

  7. 接口与接口之间可以继承,而且可以多继承。

  8. 接口的使用,体现了多态性。

  9. 接口实际上可以看作时一种规范。

为什么要有接口

由于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);


    }
}

推荐阅读