JAVA---jdk1.8之后的接口(接口中定义默认方法和静态方法,私有方法)

x33g5p2x  于2022-05-30 转载在 Java  
字(1.4k)|赞(0)|评价(0)|浏览(426)

JAVA—jdk1.8之后的接口(接口中定义默认方法和静态方法)

从jdk1.8开始,接口里允许定义默认方法
格式:public default 返回值类型 方法名(参数列表){ 方法体 }
  1. public interface Demo1 {
  2. public default void method2(){
  3. System.out.println("Hello");
  4. }
  5. }
为什么要定义默认方法?为了解决接口升级的问题
什么是接口升级?

如果当前有一个接口,并且n多个类实现了这个接口;而当接口再次添加抽象方法的时候,n多个实现类就会报错。而出现了默认方法就解决了这个问题

接口中的默认方法怎么用?

接口:

  1. public interface Demo1 {
  2. public abstract void method();
  3. //新添加的默认方法
  4. public default void methodDefault(){
  5. System.out.println("这是新添加的接口默认方法");
  6. }
  7. }

实现类:

  1. public class MyImpA implements Demo1 {
  2. @Override
  3. public void method() {
  4. System.out.println("这是实现类的抽象方法");
  5. }
  6. }

main方法:创建了实现类的对象,可以调用实现类的方法,也可以调用接口的默认方法

注意:如果实现类重写了接口的默认方法,那么调用的就是实现类重写后的方法

  1. public class Main {
  2. public static void main(String[] args) {
  3. MyImpA a = new MyImpA();
  4. a.method();
  5. a.methodDefault(); //调用接口的默认方法
  6. }
  7. }

输出结果:这是实现类的抽象方法
这是新添加的接口默认方法

从jdk1.8开始,接口可以定义静态方法
格式:public static 返回值类型 方法名称(参数列表){ 方法体 }
调用:直接 接口名.方法名 调用,与普通静态方法的调用一样(不能通过接口实现类的对象来调用接口中的静态方法)

接口:

  1. public interface Demo2 {
  2. public static void method(){
  3. System.out.println("这是接口的静态方法");
  4. }
  5. }

mian方法:

  1. public class MyImpB {
  2. public static void main(String[] args) {
  3. Demo2.method(); //输出 这是接口的静态方法
  4. }
  5. }
从jdk1.9开始:接口中允许定义私有方法

1.普通私有方法:解决多个默认方法之间重复代码的问题

格式:private 返回值类型 方法名称(参数列表){ 方法体 }

2.静态私有方法:解决多个静态方法之间的重复代码问题

格式:private static 返回值类型 方法名称(参数列表){ 方法体 }

接口中的常量(就是成员变量)的写法格式:
[public][static] [final] 数据类型 常量名称 = 数据值;
注意:

1.接口没有静态代码块,不能有构造方法

2.一个类可以实现多个接口

3.如果实现类所有实现的多个接口中,存在重复的抽象方法,覆盖重写一次即可

4.如果实现类没有覆盖重写所有接口当中的所有抽象方法,那么这个实现类必须是一个抽象类

5.接口可以多继承,但是如果继承来多个defalut方法相同,那么必须对冲突的defalut方法进行覆盖重写

6.一个类如果直接继承父类当中的方法,和接口当中的默认方法产生了冲突,优先用父类的方法

相关文章