Java接口

接口的概念

接口(Interface),在Java编程语言中是一个抽象类型,是常量值和抽象方法定义的集合,接口通常以interface来声明。一个类通过实现接口的方式,从而来实现接口的抽象方法。

接口并不是类,编写接口的方式和类很相似,但是它们属于不同的概念。类描述对象的属性和方法。接口则包含类要实现的方法,只是方法的定义,没有方法体

通俗地理解接口

在现实生活中,接口是什么呢?它可以是笔记本上的USB口,电源插座等

那么这些接口在实现意义上以及使用标准上也有所不同

  • 电脑的USB口上,可以插:U盘、鼠标、键盘…所有符合USB协议的设备
  • 电源插座插孔上,可以插:电脑、电视机、电饭煲…所有符合规范的设备

通过上述的例子我们就可以看出:接口就是公共的行为规范标准,在实现时,只要符合规范标准,就可以通用。在Java中,接口可以看成是:多个类的公共规范,是一种引用数据类型

Java中存在接口的意义

  1. 为了实现多态性
  2. 减少代码的书写
  3. 提高了代码的可维护性和扩展性
  4. 在团队合作中,提高代码的规范性

定义接口

Java 接口的定义方式与类基本相同,不过接口定义使用的关键字是 interface,接口定义的语法格式如下:

[public] interface 接口名称 {
    // 接口体,其中可以包含定义常量和声明方法
    [public] [static] [final] 数据类型 变量名 = 值;    // 定义常量
    [public] [abstract] 返回值类型 方法名(参数列表);    // 声明方法
}

举个例子:

实现接口

接口不能直接实例化使用,必须要有一个类去实现它,实现接口中所有的抽象方法。

当类实现接口的时候,类要实现接口中所有的方法,即重写接口中的方法。否则,类必须声明为抽象的类。

类使用implements关键字实现接口,一个类可以实现一个或多个接口。在类声明中,implements关键字放在class变量名后面。

实现接口的语法:

<修饰符> class <类名> [extends 父类名] [implements 接口名1[, 接口名2…]] {
    // 主体
}

举个例子

实现接口需要注意以下几点:

  • 实现接口与继承父类相似,一样可以获得所实现接口里定义的常量和方法。如果一个类需要实现多个接口,则多个接口之间以逗号分隔。
  • 一个类只能继承一个类,但是能实现多个接口。
  • 一个类可以继承一个父类,并同时实现多个接口,implements 部分必须放在 extends 部分之后。
  • 一个类实现了一个或多个接口之后,这个类必须完全实现这些接口里所定义的全部抽象方法(也就是重写这些抽象方法);否则,该类将保留从父接口那里继承到的抽象方法,该类也必须定义成抽象类。

Java接口可以继承吗?

Java接口可以继承,而且是可以多继承,但是只能是接口继承接口,类只能实现接口。一个接口可以继承另一个或多个接口,一个普通类可以实现多个接口。

接口的继承

一个接口能继承另一个接口,和类之间的继承方式比较相似。接口的继承使用extends关键字,子接口继承父接口的方法。

实现接口继承的语法:

[public] interface 接口名称 extends 接口名1[, 接口名2,…]{
    //主体
}

下面的TimeService接口被UserService接口继承:

public interface TimeService {
    void timer();
}

public interface UserService extends TimeService{
    void add(String name);
    void delete(String name);
    void update(String name);
    void query(String name);
}

那么UserService接口中就有5个方法了,实现UserService接口的类则必须实现这5个方法,其中1个方法来自于TimeService接口

注意:一个接口可以有多个直接父接口,但接口只能继承接口,不能继承类。

接口的多继承

在Java中,类的多继承是不合法,但接口允许多继承。

在接口的多继承中extends关键字只需要使用一次,在其后跟着继承接口。

public interface ChaseService extends TimeService,UserService{
}

以上的程序片段是合法定义的子接口,与类不同的是,接口允许多继承,而 TimeService及 UserService 可以定义或是继承相同的方法

接口与类的区别:

  • 接口不能用于实例化对象。
  • 接口没有构造方法。
  • 接口中所有的方法必须是抽象方法,Java 8 之后 接口中可以使用 default 关键字修饰的非抽象方法。
  • 接口不能包含成员变量,除了 static 和 final 变量。
  • 接口不是被类继承了,而是要被类实现。
  • 接口支持多继承。

抽象类和接口的区别

  1. 抽象类中的方法可以有方法体,就是能实现方法的具体功能,但是接口中的方法不行。

  2. 抽象类中的成员变量可以是各种类型的,而接口中的成员变量只能是 public static final 类型的。

  3. 接口中不能含有静态代码块以及静态方法(用 static 修饰的方法),而抽象类是可以有静态代码块和静态方法。

  4. 一个类只能继承一个抽象类,而一个类却可以实现多个接口。

:JDK 1.8 以后,接口里可以有静态方法和方法体了。

:JDK 1.8 以后,接口允许包含具体实现的方法,该方法称为"默认方法",默认方法使用 default 关键字修饰。更多内容可参考 Java 8 默认方法

:JDK 1.9 以后,允许将方法定义为 private,使得某些复用的代码不会把方法暴露出去。更多内容可参考 Java 9 私有接口方法

接口特性

  • 接口中每一个方法也是隐式抽象的,接口中的方法会被隐式的指定为 public abstract(只能是 public abstract,其他修饰符都会报错)。
  • 接口中可以含有变量,但是接口中的变量会被隐式的指定为 public static final 变量(并且只能是 public,用 private 修饰会报编译错误)。
  • 接口中的方法是不能在接口中实现的,只能由实现接口的类来实现接口中的方法。

接口的注意点:

  1. 接口作为约束,成为一种规范,就像法律一样,制定好后大家都遵守
  2. 定义一些方法,让不同的人实现。比如定义了一个接口,10个人去实现,就得到了10种不同的实现方式
  3. 定义的方法时默认public abstract,可以省略不写
  4. 定义属性时,用静态常量写,public static final,一般不建议在接口中写属性
  5. 接口不能包含成员变量,除了 static 和 final 变量。
  6. 接口不能被实例化,因为接口不是类,没有构造方法
  7. 通过关键字implement 可以实现多个接口,利用接口,实现多继承
  8. 必须要重写接口中的方法
  9. 因为接口的方法默认是public类型的,所以在实现的时候一定要用public来修饰(否则默认为protected类型,缩小了方法的使用范围)。


此学习资料参考于

https://www.runoob.com/java/java-interfaces.html

https://www.php.cn/java-article-435797.html

posted @ 2022-04-23 13:04  ·追·  阅读(82)  评论(0)    收藏  举报
/*鼠标跟随效果*/ //返回顶部 returnTop