查看原文
其他

惊呆了!JDK1.8 竟然打破了我对接口的一切认知。。。

来源:cnblogs.com/AlanWilliamWalker/p/11156455.html

  • 前言

  • 一:简介

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

  • 二:示例

  • 执行结果:


前言

今天在学习mysql分区优化时,发现一个博客专家大神,对其发布的文章简单学习一下;

一:简介

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

在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核心技术公众号,在后台回复 “福利”可以获取一份我整理的最新Java面试题资料。

最近好文分享

955 不加班的公司名单:955.WLB

while(true)和for(;;)哪个更快?!

这款软件几乎可以操作所有数据库!

SQL性能优化,太太太太太太太有用了!

Class.forName和ClassLoader有区别?

Java程序员可不可以不用再写finally?

更多请扫码关注 • Java核心技术


一个分享Java核心技术干货的公众号


欢迎大家在看、转发
: . Video Mini Program Like ,轻点两下取消赞 Wow ,轻点两下取消在看

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存