美文网首页
Java-基础-接口

Java-基础-接口

作者: 月沉眠love | 来源:发表于2019-08-16 11:57 被阅读0次

1、接口定义:

如果一个抽象类没有字段,所有方法全部都是抽象方法:

abstract class Person {
   public abstract void run();
   public abstract String getName();
}

就可以把该抽象类改写为接口interface
在Java中,使用interface可以声明一个接口

interface Person {
    void run();
    String getName();
}

所谓interface,就是比抽象类还要抽象的纯抽象接口,因为它连字段都不能有。因为接口定义的所有方法默认都是public abstract的,所以这两个修饰符不需要写出来(写不写效果都一样)。

当一个具体的class去实现一个interface时,需要使用implements关键字

class Student implements Person {
    private String name;

    public Student(String name) {
        this.name = name;
    }

    @Override
    public void run() {
        System.out.println(this.name + " run");
    }

    @Override
    public String getName() {
        return this.name;
    }
}
在Java中,一个类只能继承自另一个类,不能从多个类继承。但是,一个类可以实现多个interface
class Student implements Person, Hello { // 实现了两个interface
    ...
}

2、术语

注意区分术语:

Java的接口特指interface的定义,表示一个接口类型和一组方法签名,而编程接口泛指接口规范,如方法签名,数据格式,网络协议等。

抽象类和接口的对比如下:

抽象类和接口的对比.png

3、接口继承

一个interface可以继承自另一个interface。interface继承自interface使用extends,它相当于扩展了接口的方法

interface Hello {
    void hello();
}

interface Person extends Hello {
    void run();
    String getName();
}

此时,Person接口继承自Hello接口,因此,Person接口现在实际上有3个抽象方法签名,其中一个来自继承的Hello接口。

4、继承关系

合理设计interface和abstract class的继承关系,可以充分复用代码。一般来说,公共逻辑适合放在abstract class中,具体逻辑放到各个子类,而接口层次代表抽象程度。可以参考Java的集合类定义的一组接口、抽象类以及具体子类的继承关系:

接口、抽象类以及具体子类的继承关系.png

在使用的时候,实例化的对象永远只能是某个具体的子类,但总是通过接口去引用它,因为接口比抽象类更抽象

List list = new ArrayList(); // 用List接口引用具体子类的实例
Collection coll = list; // 向上转型为Collection接口
Iterable it = coll; // 向上转型为Iterable接口

5、default方法

在接口中,可以定义default方法
例如,把Person接口的run()方法改为default方法

public class Main {
    public static void main(String[] args) {
        Person p = new Student("Xiao Ming");
        p.run();
    }
}

interface Person {
    String getName();
    default void run() {
        System.out.println(getName() + " run");
    }
}

class Student implements Person {
    private String name;

    public Student(String name) {
        this.name = name;
    }

    public String getName() {
        return this.name;
    }
}

实现类可以不必覆写default方法。
default方法的目的是:当我们需要给接口新增一个方法时,会涉及到修改全部子类。如果新增的是default方法,那么子类就不必全部修改,只需要在需要覆写的地方去覆写新增方法。

default方法和抽象类的普通方法是有所不同的。因为interface没有字段,default方法无法访问字段,而抽象类的普通方法可以访问实例字段。

总结:

1.Java的接口(interface)定义了纯抽象规范,一个类可以实现多个接口;

2.接口也是数据类型,适用于向上转型和向下转型;

3.接口的所有方法都是抽象方法,接口不能定义实例字段;

4.接口可以定义default方法(JDK>=1.8)

相关文章

  • Java-基础-接口

    1、接口定义: 如果一个抽象类没有字段,所有方法全部都是抽象方法: 就可以把该抽象类改写为接口:interface...

  • JAVA-线程-一-执行器Executor

    2. JAVA-线程-二-ExecutorService 接口 3. JAVA-线程-三-AbstractExec...

  • Hello Java

    目录 Java-基础(1/6) Java-对象(2/6) Java-核心库类 上(3/6) Java-核心库类下(...

  • JAVA-线程-三-AbstractExecutorServic

    1. JAVA-线程-一-执行器Executor 2. JAVA-线程-二-ExecutorService 接口 ...

  • Java-接口的基础语法

    接口的使用的方法真正体现了面对对象的精髓。接口绝对是最重要的。主要内容。1.什么是接口。2.接口的基本语法。 电脑...

  • Java-接口

    基本概念 接口(Interface),在Java编程语言中是一个抽象类型,是抽象方法的集合。接口通常以interf...

  • Java-接口

    1. 抽象类和抽象方法 建立通用接口的目的是:使子类继承从而不同的子类可以用不同的方式表示此接口。通用接口建立起一...

  • java-服务摧毁, 服务关闭 优雅退出 并执行摧毁方法,完成某

    java-服务下线时需要执行方法, 如断开数据库连接,zk连接... 1. 实现DisposableBean接口 ...

  • Java-接口练习

    目的 模拟一个界面,设置字体大小和颜色 复杂方法 阅读界面, 显示文本 模拟进入设置页面 创建一个Setting类...

  • JAVA-跳转语句(break,continue)

    java-编程基础 1. 跳转语句(break,continue) 1.1 break语句 break语句在swi...

网友评论

      本文标题:Java-基础-接口

      本文链接:https://www.haomeiwen.com/subject/kfqtsctx.html