接口

Posted yicurtain

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了接口相关的知识,希望对你有一定的参考价值。

接口

接口的使用

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


    }
}

以上是关于接口的主要内容,如果未能解决你的问题,请参考以下文章

java 代码片段

无法通过接口获取与片段通信的活动

将接口从片段传递到kotlin中的活动

是否可以动态编译和执行 C# 代码片段?

Express实战 - 应用案例- realworld-API - 路由设计 - mongoose - 数据验证 - 密码加密 - 登录接口 - 身份认证 - token - 增删改查API(代码片段

前端防扒代码片段