JAVA 面向对象进阶 19 接口扩展

1 接口升级

  • JDK7 以前:接口中只能定义抽象方法
  • JDK8 的新特性:接口中可以定义有方法体的方法。(默认、静态)
  • JDK9 的新特性:接口中可以定义私有方法

2 JDK8 开始接口中新增的方法

2.1 默认方法 default

  • 允许在接口中定义默认方法,需要使用关键字 default 修饰
    作用:解决接口升级的问题(即以前接口的那些实现类,可以不立即重写接口新增的方法)
  • 接口中默认方法的定义格式
    格式:public default 返回值类型方法名(参数列表){}
    范例:public default void show(){ }
  • 接口中默认方法的注意事项
    默认方法不是抽象方法,所以不强制被重写。但是如果被重写,重写的时候去掉 default 关键字
    public可以省略,
    default 不能省略 
    如果实现了多个接口,多个接口中存在相同名字的默认方法,子类就必须对该方法进行重写

2.2 静态方法 static

  • 允许在接口中定义定义静态方法,需要用 static 修饰
  • 静态方法不能被重写
  • 接口中静态方法的定义格式
    格式:public static 返回值类型方法名(参数列表){}
    范例: public static void show() { }
  • 接口中静态方法的注意事项
    静态方法只能通过接口名调用,不能通过实现类名或者对象名调用
    public可以省略,static不能省略

3 JDK9 新增 私有方法

由于接口中的多个方法之间,可能有很多重复代码,那么就希望抽取到私有方法内,只供本接口使用,不希望外界调用

3.1 接口中私有方法的定义格式: 

  • 格式1:private  返回值类型  方法名(参数列表){}                     (服务于默认方法)
    范例1: private void show() { }
  • 格式2:private static  返回值类型  方法名(参数列表){}           (服务于静态方法)
    范例2: private static void method() { }

4 总结

  • JDK7以前:接口中只能定义抽象方法。
  • JDK8:接口中可以定义有方法体的方法。(默认、静态)
  • JDK9:接口中可以定义私有方法。
  • 私有方法分为两种:普通的私有方法,静态的私有方法

总结:接口可以定义默认方法(可以被重写),以及静态方法(不可以被重写),私有方法(是为了抽取重复代码而存在)

2 接口的应用

接口做为参数传递

可以接收这个接口的所有实现类对象

只要车 和 搬家公司 都实现了 运输接口,那么都可以传递过来

2.1 总结

  • 接口代表规则,是行为的抽象。想要让哪个类拥有一个行为,就让这个类实现对应的接口就可以了
  • 当一个方法的参数是接口时,可以传递接口所有实现类的对象,这种方式称之为接口多态

3 适配器设计模式

3.1 设计模式

  • 设讨模式(Design pattern)是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。
  • 使用设计模式是为了可重用代码、让代码更容易被他人理解、保证代码可靠性、程序的重用性。
  • 简单理解:设计模式就是解决各种问题的套路

3.2 适配器设计模式

适配器设计模式:解决接口与接口实现类之间的矛盾问题

3.2.1 接口与接口实现类之间的矛盾问题

比如接口内有十个抽象方法,但实现类只想用第五个方法,但是由于抽象方法必须全部重写,所以矛盾

3.2.2 例子

接口
package com.bjpowernode.test09;

public interface Inter {
    public abstract void method1();
    public abstract void method2();
    public abstract void method3();
    public abstract void method4();
    public abstract void method5();
    public abstract void method6();
    public abstract void method7();
    public abstract void method8();
}
适配器
package com.bjpowernode.test09;

//一般适配器会写成抽象的,目的是为了不让外界创建它的对象
public abstract class InterAdapter implements Inter {
    @Override
    public void method1() {

    }

    @Override
    public void method2() {

    }

    @Override
    public void method3() {

    }

    @Override
    public void method4() {

    }

    @Override
    public void method5() {

    }

    @Override
    public void method6() {

    }

    @Override
    public void method7() {

    }

    @Override
    public void method8() {

    }
}
实现类
package com.bjpowernode.test09;

//写继承适配器(类),就可以不用全部重写
//不要写实现接口
public class Intermpl extends InterAdapter {
    //我需要用到那个方法,就重写哪个方法就可以了
    @Override
    public void method5() {
        System.out.println("只要用第五个方法");
    }
}

3.3 总结

一个接口中抽象方法过多,但是我只要使用其中一部分的时候,就可以适配器设计模式

书写步骤:

  • 编写中间类 XXXAdapter 实现对应的接口
  • 对接口中的抽象方法进行空实现(方法体空着)
  • 真正的实现类继承中间类,并重写需要用的方法
  • 为了避免其他类创建适配器类的对象,中间的适配器类用 abstract 进行修饰

参考链接:

面向对象进阶-19-多学三招:接口中新增方法,接口应用和适配器设计模式_哔哩哔哩_bilibili

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值