概念
接口就是多个类的公共规范。
接口是一种引用数据类型,最重要的内容就是其中的 抽象方法。
接口的定义
public interface 接口名 {
// 接口内容
}
备注:换成了关键字interface之后,编译生成的字节码文件仍然是: .java -- > .class。
jdk7:
1.常量(被static final修饰的变量)
2.抽象方法(被abstract修饰的抽象方法-->不写abstract,也有)
jdk8:
3.默认方法
4.静态方法
jdk9:
5.私有方法
接口抽象方法的定义及使用
定义:public abstract 返回值类型 方法名称(参数);
即使不写abstatract,默认也有
使用:
1.创建一个实现类,实现这个接口 --> implement
2.重写接口中的抽象方法,去实现这个方法
3.创建实现类对象(接口不能创建对象)
4.调用重写的方法
接口默认方法的定义以及使用
定义:修饰符 default 返回值类型 方法名(参数){
方法体
返回值
}
范例:
public default void show3() {
}
使用:
1.创建实现类,实现接口
2.不用重写默认方法
3.创建实现类对象,调用接口中的默认方法
注意事项:
- 默认方法不是抽象方法,所以不强制被重写。但是可以被重写,重写的时候去掉default关键字
- public可以省略,default不能省略
使用场景:添加新功能
接口静态方法
静态方法: static --> 静态方法被调用的时候,直接用类名调用
public static 返回值类型 方法名(参数){
方法体
返回值
}
范例:
public static void show() {
}
注意事项:
- 静态方法只能通过接口名调用,不能通过实现类名或者对象名调用
- public可以省略,static不能省略
接口私有方法
私有方法产生原因:
Java 9中新增了带方法体的私有方法,这其实在Java 8中就埋下了伏笔:Java 8允许在接口中定义带方法体的 默认方法和静态方法。这样可能就会引发一个问题:当两个默认方法或者静态方法中包含一段相同的代码实 现时,程序必然考虑将这段实现代码抽取成一个共性方法,而这个共性方法是不需要让别人使用的,因此用 私有给隐藏起来,这就是Java 9增加私有方法的必然性。
定义格式
格式1
private 返回值类型 方法名(参数列表) { }
范例1
private void show() {
}
格式2
private static 返回值类型 方法名(参数列表) { }
范例2
private static void method() {
}
注意事项:
- 默认方法可以调用私有的静态方法和非静态方法
- 静态方法只能调用私有的静态方法
接口中的成员变量(常量)
定义格式: 修饰符 static final 数据类型 变量名 = 值
注意:不写static final 默认也有
使用:接口名直接调用
注意事项:
1.都是static final修饰的,不写也有
2.需要我们手动复制
3.不能二次复制
4.一般变量名都是大写(规范)
接口的多实现
类不能多继承,只支持单继承
接口可以多实现 --> 一个实现类可以同时实现多个接口
继承一个类的同时实现多个接口 -->子类 extends 父类 imlements 接口1,接口2
注意事项:
1.一个类继承一个父类的同时实现一个或者多个接口,要重写所有的抽象方法
2.如果两个接口中有重名的抽象方法,那么我们就可以重写一个
3.如果两个接口中有重名的默认方法,那么我们必须重写一个
4.如果接口中有和父类的方法一样的默认方法,那么我们先执行父类的
接口不仅能多实现,还可以多继承,但是类不能多继承
注意事项:父接口中如果有重名的默认方法,那么子接口中要重写一次
接口和抽象类的区别以及接口的一般使用场景
接口-->一般只写方法 作为一个标准-->内容单一
抽象类-->一般作为顶级的父类 -->拥有抽象方法 普通方法 构造方法 成员变量
接口:在工作中,作为一个功能的大集合来用-->接口中都是方法(一般都是抽象方法)
网友评论