欢迎光临
我们一直在努力

Java 学习笔记:接口

一、概念

1.定义

接口是 Java 中一种引用数据类型,使用 interface 关键字定义,本质是一套行为规范、功能标准。接口只声明方法(做什么),不具体实现(怎么做),用来约束实现类必须具备指定行为。

2.核心特点

(1)接口没有构造方法,不能被实例化,无法通过 new 直接创建对象。

(2)接口中不包含实例变量,成员有固定修饰符(可省略,编译器自动补全)。

(3)接口和类是并列的结构,编译后同样生成 .class 字节码文件。

(4)接口不能创建对象,但是可以声明引用。

(5)接口中的属性都是公开、静态、常量(默认的被 public static final 修饰)

        必须在定义时直接赋值,后续无法修改;

        全局静态常量,可以通过接口名。常量名直接访问。

(6)接口中的方法都是公开、抽象方法(默认的被 public abstract 修饰)

        只有方法声明,没有方法体;

        所有实现类必须重写该抽象方法。

注意:接口不是类

二、实现类

类想要遵守接口的规范,需要实现接口,使用关键字 implements 。

1.语法:class 类名 implements 接口名{ }

核心特点:一个类可以同时实现多个接口,这是 Java 弥补类单继承限制的重要方式。

2.方法权限要求

接口中抽象方法默认是 public ,因此重写时,访问权限只能是 public,不能使用默认、protected、private 。

3.应用:接口名 引用名 = new 实现类类名(实参);

        注意:接口类型的引用指向实现类的对象,多态的应用。 → 强制使用多态。

三、接口的继承性

接口和接口之间可以发生继承,使用关键字 extends ,和类继承语法一致,但规则差异很大。

1.接口支持多继承:一个子接口可以同时继承多个父接口;

2.子接口会全盘继承父接口的所有成员(常量、抽象方法、默认方法、静态方法、私有方法除外)。

3.接口继承的本质:合并多个接口的规范,扩充行为标准。

四、接口多继承的影响

如果引用之间相互强制类型转换,转换的一方为接口类型的引用,则编译一定通过,但是运行的时候分以下两种情况:

(1)引用中实际存储的对象类型和要转换的类型一致,则运行通过

(2)引用中实际存储的对象类型和要转换的类型不一致,则运行报错,错误信息为:

                java.lang.ClassCasException(类型转换异常)

        接口静态方法重名:接口静态方法只属于当前接口,不会被继承,因此不存在冲突,调用时用对应接口名即可。

五、接口的作用

1.统一行为规范

        接口定义一套标准,强制所有实现类遵守相同的行为定义。

2.弥补 Java 类的单继承缺陷

        Java 中类只能单继承,但一个类可以实现多个接口,变相实现“多继承”,拓展类的功能。

3.降低代码耦合度

        面向接口编程,而非面向实现类编程

(1)上层代码只依赖接口,不依赖具体实现类;

(2)后续替换、新增实现类时,无需修改原有业务代码,符合开闭原则。

4.实现多态

        接口引用指向实现类对象,结合向上转型,实现多态效果,是多态的重要载体。

六、接口的回调

1.接口回调:接口定义之后,先有接口的使用者,再有接口的实现者。

2.注意:遇到接口回调的应用,开发人员需要关注的是根据接口规范,给予接口的实现部分。

接口和抽象类的区别

                                            接口                                                                    抽象

关键字                             interface                                                       abstract     class

继承方式            类使用 extends,单继承                   类使用 implements,多实现;接口可多继承

构造方法                       有构造方法                                                           无构造方法

成员变量    普通变量、静态变量、常量都可,可修改       只能是 public static final 常量,不可修改

普通方法    实例方法、静态方法、私有方法都支持          JDK8+有default/static方法,JDK9+有                                                                                                                        private方法

抽象方法                          可以有                                                         JDK7 全是抽象方法

代码块                   支持静态 / 实例代码块                                            不支持任何代码块

权限修饰                  四种权限都可用                             成员默认 public,不能用private / protected

关系语义          is-a(是一个,从属关系)                                  like-a(具备能力,行为规范)

赞(0)
未经允许不得转载:171主机测评 » Java 学习笔记:接口
分享到: 更多 (0)

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址