java接口
1:接口定义的基本格式
什么是接口
- 1:接口就是多个类的公共规范
- 2:接口是一种引用数据类型,最重要的内容就是在其中的:抽象方法
如果定义一个接口的格式
public interface 接口名{
//接口内容
}
需要注意
-
1:换成了关键字interface之后,编译生成的字节码文件是:.java–> .class
-
2:如果是java7,那么接口可以包含的内容有
- 1:常量
- 2:抽象方法
-
3:如果是java8,还可以额外包含有
- 3:默认方法
- 4:静态方法
-
4:如果是java9,还可以额外包含
- 5:私有方法
2:接口中的抽象方法
抽象方法的解释
- 定义了“动物”父类,其中“动物名称”和“动物年龄”属性已经明确了,但是“动物叫什么”的方法没有明确,此时就可以将“动物叫”定义为抽象方法。
- 所以,抽象类是为了把相同的但不确定的东西的提取出来,为了以后的重用。定义成抽象类的目的,就是为了在子类中实现抽象类。
在任何一个版本中,接口都能定义抽象方法
格式
public abstract 返回值类型 方法名称 (参数列表){
}
注意事项:
- 1:接口中的抽象方法,修饰符必须是两个固定的关键字:public abstract
- 2:这两个关键字的修饰符,可以选择省略
使用抽象方法
-
1:接口不能直接使用,必须有一个实现类来实现该接口
- 格式
- public class 实现类名称 implements 接口名称{
//.....
}
}
-
2:接口的实现类必须复写(实现)接口中所有的抽象方法。
-
实现
- 去掉abstract关键字,加上方法体大括号
-
-
3:创建实体类的对象,进行使用
-
注意事项
- 如果实现类并没有覆盖重写接口中的所有的抽象方法,那么这个实现类就必须是抽象类
3:接口中的默认方法
格式
- public default 返回值类型 方法名称(参数列表){
方法体
}
规则
- 1.默认方法使用 default 关键字,一个接口中可以有多个默认方法。
2.接口中既可以定义抽象方法,又可以定义默认方法,默认方法不是抽象方法。
3.子类实现接口的时候,可以直接调用接口中的默认方法,即继承了接口中的默认方法。
4.接口中同时还可以定义静态方法,静态方法通过接口名调用。
使用
- 1:接口的默认方法,可以通过接口实现类对象,直接调用。
2:接口的默认方法,也可以被接口实现类进行覆盖重写
接口的默认方法是为了干嘛
- 接口中定义默认方法是为了解决:
假如我们定义了一个接口,里面已经有一个抽象方法。
然后一个工具类已经实现了接口,并且已经进行了复写抽象方法
现在要在接口中又新添加一个方法,为了防止工具类被重写(因为工具类已经有了很多的业务),如果进行重写。可能会出错,所以有了接口中的默认方法
工具类也可以去重写接口中的默认方法。
4:接口中的静态方法
格式
- public static 返回值类型 方法名称(参数列表){
方法体
}
注意事项
- 不能通过接口的实现类的对象来调用接口中的静态方法
正确用法
-
通过接口名称
- 直接调用其中的静态方法
-
格式
- 接口名称.静态方法名(参数)
5:接口中的私有方法
格式
-
普通私有方法,解决多个默认方法之间代码重复问题
- private 返回值类型 方法名称(参数列表){
方法体
}
- private 返回值类型 方法名称(参数列表){
-
静态私有方法,解决多个静态方法之间代码重复问题
- private static 返回值类型 方法名称(参数列表){
方法体
}
- private static 返回值类型 方法名称(参数列表){
作用
- 1:我们应该使用私有修饰符(private)来定义这些方法。
2:我们不能同时使用私有修饰符(private)和abstract来定义这些方法。
3:“私有”方法意味着完全实现的方法,因为子类不能继承并覆盖此方法。
4:“抽象”方法意味着无实现方法。这里子类应该继承并覆盖此方法。
5:私有方法必须包含方法体,必须是具体方法。
6:这些接口私有方法仅在该接口内是有用的或可访问的。我们无法从接口访问或继承私有方法到另一个接口或类。
6:接口中的常量
格式
- public static final 数据类型 常量名称 = 数据值
注意事项
- 1:接口当中的常量,可以省略public static final,注意,不写也照样是这样
- 2:接口当中的常量,必须进行赋值,不能不赋值
- 3:接口常量的名称,使用完全大写的字母,用下划线进行分割(推荐命名规则)
- 4:一旦赋值就不能进行修改