博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
JDK1.8新特性(一): 接口的默认方法default
阅读量:4619 次
发布时间:2019-06-09

本文共 1392 字,大约阅读时间需要 4 分钟。

前言


今天在学习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 {@Overridepublic 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() {@Overridepublic 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


参考文章:

 

 

转载于:https://www.cnblogs.com/AlanWilliamWalker/p/11156455.html

你可能感兴趣的文章
#openstack故障处理汇总
查看>>
A Simple Problem with Integers(线段树区间更新复习,lazy数组的应用)-------------------蓝桥备战系列...
查看>>
java高级工程师学习方向
查看>>
线性筛素数
查看>>
SICP 习题 (1.42)解题总结
查看>>
IT系统故障引起的一个事故的思考
查看>>
Lua 第一个应用程序 Hello World
查看>>
5.PHP 教程_PHP echo/print
查看>>
【转】Git使用教程之BUG分支
查看>>
34. Search for a Range(C++)
查看>>
drag-html
查看>>
【转】Angular之constructor和ngOnInit差异及适用场景
查看>>
linux学习的哲学层面的思考-架构
查看>>
准备着手学习python
查看>>
【python】函数参数关键字索引、参数指定默认值、搜集参数
查看>>
【MySQL】查看支持的字符集show character set;
查看>>
JS实现无缝滚动
查看>>
java读取Excel 错误: jxl.read.biff.BiffException: Unable to recognize OLE stream
查看>>
js获取时间戳的三种方式
查看>>
win7 文件共享 xp
查看>>