当前位置: 首页 > news >正文

Java——接口扩展

JDK8开始接口中新增的方法

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


默认方法 

需要使用关键字default修饰

作用:

解决接口升级的问题

接口中默认方法的定义格式:

格式: public default 返回值类型方法名(参数列表){}
范例: public
default void show () { }

接口中默认方法的注意事项:

1.默认方法不是抽象方法,所以不强制被重写。但是如果被重写,重写的时候重写的方法去掉default关键字
2.public可以省略,
default不能省略
3.如果实现了多个接口,多个接口中存在相同名字的默认方法,子类就必须对该方法进行重写,因为不重写就不知道调用的是哪个接口中的默认方法


静态方法

需要用static修饰

接口中静态方法的定义格式:

格式: public static 返回值类型方法名(参数列表){}
范例: public
static void show () { }

接口中静态方法的注意事项:

1.静态方法只能通过接口名调用,不能通过实现类名或者对象名调用
2.public可以省略,
static不能省略 

3.静态方法在子类(实现类)中不能被重写,但是可以定义重名的方法,分别用接口名和子类类名调用,例如:

 接口:

public interface inter {

    public abstract void method();

    public static void show(){
        System.out.println("接口静态方法————show方法");
    }

}

实现类

public class interimpl implements inter{

    @Override
    public void method() {
        System.out.println("重写method方法");
    }

    //不叫重写,子类把从父类继承下来的虚方法表里的方法覆盖了才叫重写
    public static void show(){
        System.out.println("接口实现类————show方法");
    }
}

 测试类

public class test {
    public static void main(String[] args) {

        //调用接口里的show方法
        inter.show();

        interimpl il = new interimpl();
        il.method();
        //调用实现类里的show方法
        interimpl.show();
    }
}

 私有方法

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

服务默认方法

格式1: private 返回值类型方法名(参数列表){}
范例1: private void show(){ }

服务静态方法

格式2:private static 返回值类型方法名(参数列表){ }
范例2:private static void method(){ } 

作用:

将接口中的几个默认方法(静态方法)中重复部分抽取成一个方法,谁用谁调用,增强代码的复用性,为避免外界调用,所以抽取成的方法定义为私有方法


接口的应用

常规应用

接口代表规则,是行为的抽象。想要让哪个类拥有一个行为,就让这个类实现对应的接口就可以了。

进阶应用

当一个方法的参数是接口时,可以传递接口所有实现类的对象,这种方式称之为接口多态。


适配器设计模式

介绍

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

书写步骤:

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

代码举例

接口中定义了10个抽象方法,而实现类只想要使用第五个抽象方法,可以使用适配器

接口:

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();
    public abstract void method9();
    public abstract void method10();
}

适配器类(中间类):

//编写中间类XXXAdapter,实现对应的接口
//对接口中的抽象方法进行空实现
//为了避免其他类创建适配器类的对象,中间的适配器类用abstract进行修饰
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() {

    }

    @Override
    public void method9() {

    }

    @Override
    public void method10() {

    }
}

实现类:

//让真正的实现类继承中间类,并重写需要用的方法
public class interImpl extends interAdapter{
    @Override
    public void method5() {
        System.out.println("method5");
    }
}

相关文章:

  • 做网站大概要多少钱网站策划书怎么写
  • 服装行业网站建设比较好营销型网站有哪些功能
  • 安卓做任务赚钱网站批量优化网站软件
  • 做网站公司汉狮网络网站建设哪个公司好
  • 免费h5源码资源源码站金华百度seo
  • 做暖暖在线获取网站公司网站推广怎么做
  • 记录一下移动端uView动态表单校验
  • 安装npm install element-plus --save报错
  • OpenCV 图形API(24)图像滤波-----双边滤波函数bilateralFilter()
  • 随机森林与决策树
  • 什么是虚拟线程?与普通线程的区别
  • python基础语法14-多线程与多进程
  • 校园智能硬件国产化的现状与意义
  • 使用层次聚类算法对wine数据集进行聚类分析
  • Flink的数据流图中的数据通道 StreamEdge 详解
  • 如何保持自己在职场的核心竞争力
  • Python贝叶斯回归、强化学习分析医疗健康数据拟合截断删失数据与参数估计3实例
  • icoding题解排序
  • NO.87十六届蓝桥杯备战|动态规划-完全背包|疯狂的采药|Buying Hay|纪念品(C++)
  • x265 编码器中运动搜索 ME 方法对比实验
  • C++基础精讲-03
  • 苍穹外卖总结
  • 【Web API系列】WebSocketStream API 深度实践:构建高吞吐量实时应用的流式通信方案
  • 23种设计模式生活化场景,帮助理解
  • 洛谷刷题Day1——P1706+P1157+P2089+P3654
  • 要查看 FAISS 使用的 OpenMP 版本,需根据安装方式和系统环境采用不同方法。以下是具体步骤和原理分析: