千家信息网

怎么使用Java8中接口的新特性

发表于:2025-02-23 作者:千家信息网编辑
千家信息网最后更新 2025年02月23日,这篇文章主要介绍"怎么使用Java8中接口的新特性",在日常操作中,相信很多人在怎么使用Java8中接口的新特性问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答"怎么使用J
千家信息网最后更新 2025年02月23日怎么使用Java8中接口的新特性

这篇文章主要介绍"怎么使用Java8中接口的新特性",在日常操作中,相信很多人在怎么使用Java8中接口的新特性问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答"怎么使用Java8中接口的新特性"的疑惑有所帮助!接下来,请跟着小编一起来学习吧!

Java8中,可以为接口添加静态方法和默认方法。

静态方法:使用static关键字修饰。可以通过接口直接调用静态方法,并执行其方法体

默认方法:使用default关键字修饰。可以通过类来调用

直接看代码吧

package com.nanfeng.demo.interfacepractice.java8; /** * java8中的新特性 * 在接口中默认方法的权限是public,所以public也可以省略 */public interface CompareA {    // 接口中可以定义抽象方法    public static void method1() {        System.out.println("Java8中接口中可以定义静态方法,通过接口来调用--1");    }     // 默认方法    public default void method2() {        System.out.println("Java8中接口中可以定义默认方法--2");    }    public default void method3() {        System.out.println("Java8中接口中可以定义默认方法--3");    }}

编写测试类ComepareTest

package com.nanfeng.demo.interfacepractice.java8; public class CompareATest {    public static void main(String[] args) {        // 创建实现类对象        CompareAClass c = new CompareAClass();        /**         * 知识点一:接口中的静态方法 只能通过接口来调用         * Static method may be invoked on containing interface class only         * 静态方法只能在包含接口类时调用         */        // c.method1();         // 使用接口调用method1()方法,此时的接口有点像工具类了        CompareA.method1();        /**         * 知识点二:         * 默认方法,可以通过创建实现类的对象来调用接口中的默认方法         * 或者也可以对接口中的默认方法进行重写         */        c.method2();    }} class CompareAClass implements CompareA {    /**     * 在实现类中对接口中的默认方法进行重写时     * 注意:不可以省略public权限修饰,否则会报错     * 执行时,依然会调用我们重写后的方法,符合继承     *     *     */    @Override    public void method2() {        System.out.println("Java8中实现类可以对接口中的默认方法进行重写,注意声明方法的权限修饰符为public,且public不可省略");    }}

运行结果:

Java8中接口中可以定义静态方法,通过接口来调用
Java8中实现类可以对接口中的默认方法进行重写,注意声明方法的权限修饰符为public,且public不可省略--2

第一种情况,一个类实现了接口的同时又继承了一个父类

1、创建实现类的父类

package com.nanfeng.demo.interfacepractice.java8; /** * 实现类的父类 */public class SuperClass {    // 定义与接口中同名的方法    public void method3(){        System.out.println("实现类的父类中,出现和接口中同名同参数的方法--SuperClass");    }}

2、让子类实现接口的同时继承父类

package com.nanfeng.demo.interfacepractice.java8; public class CompareATest {    public static void main(String[] args) {        // 创建实现类对象        CompareAClass c = new CompareAClass();        /**         * 知识点一:接口中的静态方法 只能通过接口来调用         * Static method may be invoked on containing interface class only         * 静态方法只能在包含接口类时调用         */        // c.method1();         // 使用接口调用method1()方法,此时的接口有点像工具类了        CompareA.method1();        /**         * 知识点二:         * 默认方法,可以通过创建实现类的对象来调用接口中的默认方法         * 或者也可以对接口中的默认方法进行重写         */        c.method2();         /**         * 知识点三:         * 父类中的方法和接口中的方法同名时应该怎么处理?         * 如果子类(或实现类)继承的父类和实现的接口中声明了同名同参的方法         * 那么在子类没有重写此方法时,默认的调用的是父类中同名同参的方法。         * -->类优先原则         */        c.method3();    }} class ComepareAClass extends SuperClass implements CompareA {    /**     * 在实现类中对接口中的默认方法进行重写时     * 注意:不可以省略public权限修饰,否则会报错     * 执行时,依然会调用我们重写后的方法,符合继承     */    @Override    public void method2() {        System.out.println("Java8中实现类可以对接口中的默认方法进行重写,注意声明方法的权限修饰符为public,且public不可省略");    }  }

运行查看结果:

Java8中接口中可以定义静态方法,通过接口来调用--1
Java8中实现类可以对接口中的默认方法进行重写,注意声明方法的权限修饰符为public,且public不可省略--2
实现类的父类中,出现和接口中同名的方法--SuperClass

情况二

实现类在没有继承父类的前提下,对多个接口进行实现,应该如何处理

1、创建CompareB接口,创建和CompareA接口中通同参的默认方法

注意:如果一个类同时继承多个接口,接口中出现同名同参的默认方法时,会出现接口冲突。此时,实现类必须重写此方法

/** * Java接口中支持接口的多继承 * 情况一: * class ComepareAClass extends SuperClass implements CompareA * CompareA接口和SuperClass父类出现同名同参的方法时,默认会调用父类中的方法,体现了类优先原则 * 情况二: * class ComepareAClass implements CompareA, CompareB * 在没有继承父类的前提下,一个类对多个接口继承的前提下,两个接口中定义了同名同参的默认方法,会如何执行? * 知识点四: * 如果一个实现类实现了多个接口,而这多个接口中定义了同名同参的默认方法,那么在实现类没有重写此方法的情况下,报错 * -->会出现借口冲突 * 这就必须我们在实现类中重写此方法 * */class CompareAClass implements CompareA, CompareB {    /**     * 在实现类中对接口中的默认方法进行重写时     * 注意:不可以省略public权限修饰,否则会报错     * 执行时,依然会调用我们重写后的方法,符合继承     */    @Override    public void method2() {        System.out.println("Java8中实现类可以对接口中的默认方法进行重写,注意声明方法的权限修饰符为public,且public不可省略--2");    }    // 解决接口冲突,必须对接口中的方法进行重写    @Override    public void method3() {        System.out.println("ComepareAClass实现类对多个接口中的同名方法进行重写,重写后执行的就是实现类中的方法--method3()");    }}

运行结果:

Java8中接口中可以定义静态方法,通过接口来调用--1
Java8中实现类可以对接口中的默认方法进行重写,注意声明方法的权限修饰符为public,且public不可省略--2
ComepareAClass实现类对多个接口中的同名方法进行重写,重写后执行的就是实现类中的方法--method3()

情况三

在子类(或实现类)中自己定义的方法中,调用接口和父类中没有被重写的方法

/** * Java接口中支持接口的多继承 * 情况一: * class ComepareAClass extends SuperClass implements CompareA * CompareA接口和SuperClass父类出现同名同参的方法时,默认会调用父类中的方法,体现了类优先原则 * 情况二: * class ComepareAClass implements CompareA, CompareB * 在没有继承父类的前提下,一个类对多个接口继承的前提下,两个接口中定义了同名同参的默认方法,会如何执行? * 知识点四: * 如果一个实现类实现了多个接口,而这多个接口中定义了同名同参的默认方法,那么在实现类没有重写此方法的情况下,报错 * -->会出现借口冲突 * 这就必须我们在实现类中重写此方法 * 情况三: * class CompareAClass extends SuperClass implements CompareA, CompareB * 一个子类(或实现类)继承父类的同时实现多个接口 * 在子类(或实现类)中自己定义的方法中,调用接口和父类中没有被重写的方法 * */class CompareAClass extends SuperClass implements CompareA, CompareB {    /**     * 在实现类中对接口中的默认方法进行重写时     * 注意:不可以省略public权限修饰,否则会报错     * 执行时,依然会调用我们重写后的方法,符合继承     */    @Override    public void method2() {        System.out.println("Java8中实现类可以对接口中的默认方法进行重写,注意声明方法的权限修饰符为public,且public不可省略--2");    }    // 解决接口冲突,必须对接口中的方法进行重写    @Override    public void method3() {        System.out.println("ComepareAClass实现类对多个接口中的同名方法进行重写,重写后执行的就是实现类中的方法--method3()");    }     /**     * 知识点五:如何在子类(或实现类)的方法中调用父类(或者接口中)没有被重写的方法     */    public void myMethod(){        // 调用自己重写的method3()方法        this.method3();        // 调用父类中声明的method3()方法        super.method3();        // 调接口中的默认方法(注意:是非静态方法,所以不可以使用接口名调用)        //调用方式:接口名.super.方法        CompareA.super.method3();        CompareB.super.method3();     }}

到此,关于"怎么使用Java8中接口的新特性"的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注网站,小编会继续努力为大家带来更多实用的文章!

方法 接口 对接口 多个 权限 静态 情况 知识 知识点 子类 中实 此方法 特性 前提 冲突 可以通过 同时 对象 会报 学习 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 重庆汉邦网络技术有限公司 软件开发工程师一线城市薪酬 数据库连表查询语句左联 双引号数据库 我的世界服务器辅助软件下载 基础电信运营商网络安全 热点开了网络安全密钥是什么 计算机网络技术的课本 BMS软件开发前景 和平精英的多人服务器在哪里 网络安全法第33号令 服务器 积极拒绝 义乌招软件开发 数据库答案陶宏才 目前用的数据库有哪些 sql如何显示数据库前三条记录 南召县网络安全和信息化工作会 软件开发流程sa sd 打开国家网络安全 路由器上网显示服务器异常 软件开发课程故事文案 软件开发工艺流程图 六一网络安全教程 彩虹六号为什么连不上服务器 热点开了网络安全密钥是什么 如何让ups电源安全关闭服务器 慧搜网络技术有限公司 风控数据库需求分析报告 数据库中怎么设置字段的大小 建设网络安全产业园建设方案
0