接口:
解释:标准、规范
生活层面:
usb接口:
计算机厂商:将计算机上多准备几个usb口,就可以让更多的设计连接上计算机
外接设备厂商:设计厂商如果想要让其设备通过usb口连接上计算机,那么它就需要对usb接口的驱动进行实现
java层面:
举例:
我们之后会学习java连接数据库的技术 ==> jdbc
jdbc就是一组java操作数据库的接口
有如下一些常用的:
Connection接口(获取数据库连接)、Statement接口(操作sql语句)、ResultSet接口(处理结果集)...
市面主流的关系型数据库:Oracle、Mysql、Sql Server、db2...
如果上述的数据库厂商想要让我的java产品能够连接上你,数据库厂商必须自己先去对以后jdbc中所有的接口进行规范实现
讲点听得懂的:
如果多个类不是继承关系,也不在同一个继承体系中,
但是它们的内容都想定义相同的功能(方法),我们就可以将此方法定义到接口中,
让这多个类实现接口即可;
举例:
类 接口 方法
Kite、Plane、Bird FlyAble 抽象 fly()
接口的定义:
不再是class,而是interface
格式:
interface 接口名{
//...
}
接口中可以定义的成员:
java8以前:
接口中只能定义常量和抽象方法
常量:
格式:
public static final 数据类型 常量名 = 常量值;
简化形式:
数据类型 常量名 = 常量值;
常量也是标识符之一,满足规则和规范;
规范如下:
所有字母全部大写,如果是多个单词组成,每个单词中间使用下划线间隔
举例:
HELLO_WORLD_JAVA
抽象方法:
格式:
public abstract 返回值类型 方法名(形参列表);
简化形式:
返回值类型 方法名(形参列表);
接口定义完成,就是为了给类实现的(接口存在的意义)
类实现接口:
关键字:implements
格式:
class 类名 implements 接口名{
//...
}
【注意】:
类实现接口需要重写接口中所有的抽象方法,否则这个类也必须定义为抽象类
【注意事项】:
1).接口的定义需要使用interface,而不再是class
2).接口存在的意义就是为了给类所实现的,类实现接口使用implements关键字
3).类实现了接口,这个类我们成为接口的实现类
4).接口不能被实例化对象,它没有构造方法
5).接口存在多态性的体现:
接口类型的引用 指向 实现类的对象
6).前提已经发生了多态,如果想要使用实现类中独有的成员,
我们必须先对其进行强制向下转型,需要配合instanceof关键字实现
7).java中类和类之间只能满足单一继承,
8).java中接口和接口之间可以满足多继承
9).java中一个类可以实现多个接口
10).java中将一个类在继承父类的同时可以实现多个接口,
这样做的目的将类中的功能最大化
java8以后:
接口中可以定义静态方法和默认方法
静态方法:
格式:
public static 返回值类型 方法名(形参列表){
//...
}
默认方法:
格式:
public default 返回值类型 方法名(形参列表){
//...
}
注意事项:
1).静态方法的调用不能实现实现类对象,只能通过接口名
2).父类和接口中定义了相同名字的方法,子类/实现类对象调用该方法,默认调用的是父类中的(类优先原则),
如果想要调用的是接口中的方法,那么我们需要对其进行重写,显示对其进行调用
3).多个接口中定义了相同名字的默认方法,类同时实现这多个接口,
必须显示的对该默认方法进行重写,解决该接口冲突问题
思考:
为什么java8新特性中需要加入默认方法?
我们之后到企业进行开发,做的项目会进行版本的升级和迭代;
如果在升级的过程中,对于某个接口中的方法需要追加,
如果只能定义抽象方法,那么之前实现该接口的类全部都会顿时报错!
此时引入了默认方法,之前实现该接口的类都不会报错,
只需要将部分需要使用到新方法的类进行方法的重写即可;