第5章-第7节-Java面向对象编程之接口

1、接口

概念:封装了一组规范、标准

生活层面:

usb接口:

计算机厂商的角度:在设计计算机的过程中,如果多开辟几个usb口,

则可以让更多的外接设备在同一时间都连接上我的计算机

外接设备厂商的角度:如果想要让自己的产品能够连接访问计算机,

则需要提供该接口的具体实现。

程序层面:

我们之后会学习jdbc技术(java连接访问数据库的技术)

jdbc内部封装了众多的接口(一组接口):

connection接口 ==》 获取连接

Statement接口 ==》 执行sql语句

ResultSet接口 ==》 结果集

...

市面上主流的关系型数据库产品有哪些?

mysql、oracle、db2、MsSql...

主流的数据库厂商都想要让Java去连接访问它们自己的数据库产品,

则这些数据库厂商就需要提供jdbc中内部众多接口的具体实现。

说点通俗易懂的:

多个类它们内部都需要设计某方法,但是这些类之间不存在继承关系,也不再同一个继承体系下;

根据我们之前的思路,就需要在这多个类中都定义一遍该方法,显然程序代码的复用性就无法保证的;所以Java设计者提出来接口这种技术,将该方法定义到某接口中,让这多个类都去实现该接口;则这多个类就都具备了该方法行为。

举例:

类:Kite、Plane、Bird

方法:fly

接口:FlyAble

1)、接口的定义

关键字:interface

格式:

interface 接口名{

//...

}

2)、类实现接口

关键字:implements

格式:

interface 接口名{

//...

}

class 类名 implements 接口名{

//...

}

3)、接口内部可以定义哪些成员

jdk1.8(java8)版本以前:内部只能定义常量和抽象方法

常量:

public static final 数据类型 常量名 = 常量值;

简化形式:

数据类型 常量名 = 常量值;

抽象方法:

public abstract 返回值类型 方法名(形参列表);

简化形式:

返回值类型 方法名(形参列表);

2、接口注意事项:

1)、定义接口需要使用关键字interface,而不是class;

2)、java8版本以前接口内部只能定义两类成员:①.常量 ②.抽象方法;

3)、类实现接口需要实现关键字implements;

4)、实现接口的类将其称为接口的实现类;

5)、类实现接口需要实现/重写接口内部所有的抽象方法,则该类就是一个具体类,之后可以实例化对象,否则该类必须被定义为抽象类;

6)、接口不可以实例化/创建对象;

7)、接口存在的意义就是为了给类实现的;

8)、接口不是类内部没有构造方法;

9)、接口和实现类之间存在多态性的表现,具体表现如下:接口类型的引用 指向 实现类的对象;

10)、接口和接口之间可以多继承,类和类之间只能单一继承;

11)、类可以在继承父类的同时去实现多个接口,但是有语法要求,具体要求如下:

必须先继承,后实现;格式如下:

class 类名 extends 父类名 implements 接口名1,接口名2,...,接口名n{

//...

}

jdk1.8(java8)版本以后 ==> 称为java8接口相关的新特性

除了之前的常量和抽象方法,接口内部还可以定义静态方法和默认方法

静态方法:

public static 返回值类型 方法名(形参列表){

//...

}

默认方法:

public default 返回值类型 方法名(形参列表){

//...

}

【问题】:为什么会引入默认方法这种技术?

搭建场景:

开发某企业级项目的过程中,在某模块内部需要定义某接口,其内部需要设计若干个抽象方法,之后有多个类(30个)都需要实现该接口,则这些类都需要在发生实现关系的一刹那,提供这若干个抽象方法的具体实现;随着项目进度往后走,需要在该接口内部去追加5个新的功能,此时如果将这5个新的功能设计为抽象方法的话,则之前和该接口发生过实现关系的30个类都会在第一时间出现编译报错的现象!并且有部分类(10个)对于这些新的功能并不关注,但是为了满足Java语言的语法要求,这30个类都需要显示的对于这些新的功能进行方法的实现 ==> 问题:影响开发效率,所以Java设计者提出了默认方法这种技术,从格式定义上我们就看出了是有方法体的方法,将这些需要新追加的功能都设计为默认方法,则之前和该接口发生过实现关系的类,都不会第一时间出现编译语法报错现象;和这些新功能都关联的类我们考虑是否要进行方法的重写等操作;不关注这些新功能的类则直接无视即可。

3、接口的静态方法和默认方法注意事项:

1)、接口内部定义的静态方法只能通过接口名对其进行访问调用;

2)、接口和父类中定义了相同名字的默认方法和非静态方法,子类继承父类的同时去实现该接口,在外界实例化子类对象,对象访问调用该方法,默认情况下,执行的是父类中的非静态方法 ==> 原因:类优先原则,如果想要访问执行的是接口中的默认方法,则必须在子类/实现类的内部;显示的重写该方法:

格式如下:

接口名.super.方法名(...);

3)、多个接口内部都定义了相同名字的默认方法,类同时去实现这多个接口,则在搭建时间关系的一刹那,会出现编译语法报错的现象! ==> 原因:接口冲突问题,所以我们需要显示的去重写该默认方法,这样才可以过编译。

本电子书目录:《Java基础的重点知识点全集》

相关推荐
SoFlu软件机器人21 分钟前
AI 重构 Java 遗留系统:从静态方法到 Spring Bean 注入的自动化升级
java·spring·重构
liwulin050623 分钟前
【JAVA】JVM 堆内存“缓冲空间”的压缩机制及调整方法
java·开发语言·jvm
程序员小假44 分钟前
十个JVM核心知识点【全文万字保姆级详细讲解】
java·后端
泉城老铁1 小时前
springboot对接钉钉,发送钉钉消息
java·前端·后端
鸟语滑翔1 小时前
【学生管理系统升级版】
java
佩奇的技术笔记1 小时前
Java学习手册:JVM、JRE和JDK的关系
java·开发语言·jvm
夔8881 小时前
Excel通过VBA脚本去除重复数据行并保存
java·服务器·excel
AronTing1 小时前
13-Java并发编程性能优化终极指南:从原理到企业级实战
java·后端·面试
布道谷1 小时前
锁的可重入性:概念、原理与Java实现深度解析
java·后端
雷渊1 小时前
谈一谈在分布式系统中,如何保证数据一致性?
java·后端·面试