教你在Java接口中定义方法

基本上所有的Java教程都会告诉我们Java接口的方法都是public、abstract类型的,没有方法体的。

但是在JDK8里面,你是可以突破这个界限的哦。

假设我们现在有一个接口:TimeClient,其代码结构如下:

接下来,SimpleTimeClient类实现了TimeClient接口,具体代码如下:

现在假设你想在接口TimeClient中添加一个新功能,通过这个功能我们可以指定我们所在的时区。

随着TimeClient的变化,你不得不修改你的SimpleTimeClient类,实现getZonedDateTime方法。一般来说,设置时区这个功能会是各个TimeClient实现类中通用的一个功能。这个时候,你通常会选择再定义一个AbstractTimeClient类来实现getZonedDateTime方法。而在JDK8中,你可以选择直接在接口中来实现该方法(interface已经把手伸到abstract class的地盘了)。

从上面的例子,我们可以看到通过static和default修饰符我们可以直接在接口中实现方法体,同时不要忘记,任何在接口中方法声明都是public类型的哦。

OK,现在我们需要一个新的接口:AnotherTimeClient,它得继承TimeClient接口。那么,对于TimeClient接口中定义的getZonedDateTime方法,你可以做如下三种处理:

  1. 重新声明getZonedDateTime方法,使它变成abstract类型。
  2. 重新定义getZonedDateTime方法。
  3. 直接继承。

而static方法和我们在类里面定义的static方法概念一致。

原文发布于微信公众号 - java一日一条(mjx_java)

原文发表时间:2016-03-23

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏java一日一条

教你在Java接口中定义方法

基本上所有的Java教程都会告诉我们Java接口的方法都是public、abstract类型的,没有方法体的。

911
来自专栏企鹅号快讯

php的变量引用与销毁机制

在php中,符号"&"表示引用。 1、看看不引用的情况是这样子: $a = "hello world";//定义一个变量,下面赋值给$b $b = $a;//...

2959
来自专栏友弟技术工作室

Go 程序的基本结构和要素

示例 package main import "fmt" func main() { fmt.Println("hello, world") } 包...

33211
来自专栏小樱的经验随笔

UVa 11461 - Square Numbers【数学,暴力】

题目链接:https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=...

3265
来自专栏Python小屋

几行代码理解Python变量访问的LEGB顺序

Python变量访问时有个LEGB原则,也就是说,变量访问时搜索顺序为Local ==> Enclosing ==> Global ==> Builtin,听起...

2984
来自专栏java工会

JAVA 同步实现原理

Synchronized是Java中解决并发问题的一种最常用的方法,也是最简单的一种方法。Synchronized的作用主要有三个:

630
来自专栏每日一篇技术文章

Swift3.0 - 扩展

b.如果想要在定义协议的时候,不指定变量名称,在实现协议的时候,再去设定变量类型,应该怎么写?

833
来自专栏数据结构与算法

1750:全排列

1750:全排列 查看 提交 统计 提问 总时间限制: 1000ms 内存限制: 65536kB描述 给定一个由不同的小写字母组成的字符串,输出这个字符串的所...

37714
来自专栏mathor

线程同步

1323
来自专栏mukekeheart的iOS之旅

《JavaScript高级程序设计》学习笔记(3)——变量、作用域和内存问题

欢迎关注本人的微信公众号“前端小填填”,专注前端技术的基础和项目开发的学习。 本节内容对应《JavaScript高级程序设计》的第四章内容。 1、函数:通过函数...

2926

扫码关注云+社区

领取腾讯云代金券