JDK1.8在接口中写方法实现常用吗?

createh51个月前 (02-14)技术教程7



一:简介

我们通常所说的接口的作用是用于定义一套标准、约束、规范等,接口中的方法只声明方法的签名,不提供相应的方法体,方法体由对应的实现类去实现。

在JDK1.8中打破了这样的认识,接口中的方法可以有方法体,但需要关键字static或者default来修饰,使用static来修饰的称之为静态方法,静态方法通过接口名来调用,使用default来修饰的称之为默认方法,默认方法通过实例对象来调用。

静态方法和默认方法的作用:

静态方法和默认方法都有自己的方法体,用于提供一套默认的实现,这样子类对于该方法就不需要强制来实现,可以选择使用默认的实现,也可以重写自己的实现。当为接口扩展方法时,只需要提供该方法的默认实现即可,至于对应的实现类可以重写也可以使用默认的实现,这样所有的实现类不会报语法错误:Xxx不是抽象的, 并且未覆盖Yxx中的抽象方法。

二:示例

IHello接口

public interface IHello {

    // 使用abstract修饰不修饰都行
    void sayHi();

    static void sayHello(){
        System.out.println("static method: say hello");
    }

    default void sayByebye(){
        System.out.println("default mehtod: say byebye");
    }
}

HelloImpl实现类

public class HelloImpl implements IHello {
    @Override
    public void sayHi() {
        System.out.println("normal method: say hi");
    }
}

Main

public class Main {
    public static void main(String[] args) {
        HelloImpl helloImpl = new HelloImpl();
        // 对于abstract抽象方法通过实例对象来调用
        helloImpl.sayHi();
        // default方法只能通过实例对象来调用
        helloImpl.sayByebye();

        // 静态方法通过 接口名.方法名() 来调用
        IHello.sayHello();


        // 接口是不允许new的,如果使用new后面必须跟上一对花括号用于实现抽象方法, 这种方式被称为匿名实现类,匿名实现类是一种没有名称的实现类
        // 匿名实现类的好处:不用再单独声明一个类,缺点:由于没有名字,不能重复使用,只能使用一次
        new IHello() {
            @Override
            public void sayHi() {
                System.out.println("normal method: say hi");
            }
        }.sayHi();
    }
}

执行结果: normal method: say hi default mehtod: say byebye static method: say hello normal method: say hi


本号致力于发表实用的技术文章,欢迎关注Java实用技术,及时阅读每天的优质文章。

相关文章

jdk版本的选择(推荐1.8)_jdk版本哪个好

对java新手来说,选择jdk的版本也是个头晕的事情,今天小拿就给大家讲讲。内容包括1.jdk从1.5到1.11,选哪个最好2.jdk和jre的区别一、jdk版本选择jdk是java开发工具包,除了运...

Java 中 ConcurrentHashMap 1.7 和 1.8 之间有哪些区别?

在初次接触 ConcurrentHashMap 时,许多同学难免会对它高并发环境下的设计原理心生好奇。要弄清它在不同版本之间究竟有何差异,就需要先探究底层原理的“前世今生”。本文将聚焦 Java 1....

ConcurrentHashMap最全详解(含JDK1.7和1.8原理剖析)

ConcurrentHashMap是Java并发编程非常重要的容器,也是大厂重点考察,下面我就全面来详解ConcurrentHashMap@mikechenConcurrentHashMapConcu...

Java 8 新特性探秘:Lambda 表达式、Stream API 和 Optional 的深度解析

一、引言Java 8 的出现为开发者带来了诸多强大的新特性,其中 Lambda 表达式、Stream API 和 Optional 更是备受瞩目。这些新特性极大地提高了编程效率和代码的可读性,为 Ja...

PriorityQueue:非常实用的java优先级队列(jdk1.8源码分析)

最近在刷力扣题的时候不止一次看到过这个PriorityQueue,他的优良特性可以帮助我们解决大量的题目。这篇文章从用法、原理、源码以及力扣实际题目的角度进行一个全面的分析。希望对你有帮助。一、什么是...

最详细的Java学习点知识脑图,从基础到进阶,看完还有啥你不懂的

一、代码块加载顺序静态代码块只会加载1次,在普通代码块前执行,会在类链接中的准备阶段执行普通代码块每次new的时候都会加载,在构造方法前执行,其实是编译的时候,代码被放到构造函数前构造函数每次new都...