zoukankan      html  css  js  c++  java
  • Interface 中 的 default 方法、static方法

    Interface 中 的 default 方法、static方法

    偶然间看到 interface 接口中有 default、static 关键字修饰的方法。

    来源

    在 JDK1.8 时,接口中添加了 default 关键字和 static 关键字修饰的方法。defalut 修饰的方法标注为普通方法,子类无需进行实现。

    static 修饰的方法标注为静态用法,跟平常的静态用法一样

    1、default 基本用法

    1.1 当只有一个接口,实现类无需重写 default 方法

    接口 InterfaceA有 default 方法

    public interface InterfaceA {
        public default String getName() {
            return "名字为:InterfaceA";
        }
    }
    

    DefaultTest 实现 InterfaceA

    public class DefaultTest implements InterfaceA {
    }
    

    可以注意到没有实现类没有重写 getName() 方法。

    进行测试,可以直接调用InterfaceA 的 default 方法

    public static void main(String[] args) {
        DefaultTest test = new DefaultTest();
        System.out.println(test.getName());
    }
    

    输出结果:

    名字为:InterfaceA
    

    1.2 当多个接口拥有相同名称 default 方法, 实现类必须重写 default 方法

    现在 类DefaultTest同时实现 InterfaceAInterfaceB且两个接口都有相同名称的 default 方法。

    image-20210222114802168

    1.3 当继承的父类与实现的接口拥有相同名称的方法(接口中 default 修饰),调用的是父类的方法。

    DefaultTest继承于ParentTest,实现InterfaceA,但ParentTest同样有getName()方法。

    public class ParentTest {
        public String getName() {
            return "名字为:ParentTest";
        }
    }
    

    DefaultTest如下:

    public class DefaultTest extends ParentTest implements InterfaceA {
    }
    

    进行测试:

    public static void main(String[] args) {
        DefaultTest test = new DefaultTest();
        System.out.println(test.getName());
    }
    

    根据输出结果可以知道,调用的是父类的方法

    名字为:ParentTest
    

    2、static 基本用法

    在接口中,static 关键字修饰的方法为静态方法,与其他静态方法的应用并没有差别

    public interface InterfaceA {
        static String getName() {
            return "名字为:InterfaceA";
        }
    }
    

    通过接口名.方法名()直接调用

    public static void main(String[] args) {
        DefaultTest test = new DefaultTest();
        System.out.println(InterfaceA.getName());
    }
    

    default 与 static 更加拓展了接口的功能,让接口的灵活性更上一层楼。

    参考博客:https://blog.csdn.net/wf13265/article/details/79363522

    自我控制是最强者的本能-萧伯纳
  • 相关阅读:
    Java菜鸟之java基础语法,运算符(三)
    Lotus迁移到Exchange 2010 POC 之Domino Server的配置!
    hibernate:对于java.lang.NoSuchMethodError: antlr.collections.AST.getLine()I错误解决办法
    【targeting学习笔记】Display Advertising Targeting
    Domino 迁移到Exchange 之 Domino Admin 安装!
    sqlite3使用详解(Qt版本)
    .net反混淆脱壳工具de4dot的使用
    破解NET的四大神器(转)
    C#让应用程序只运行一个实例的几种方法
    Windows server 2008 R2实现多用户远程连接
  • 原文地址:https://www.cnblogs.com/CF1314/p/14431931.html
Copyright © 2011-2022 走看看