Java接口如何定义方法
Java接口的方法都是public、abstract类型的,没有方法体的。但是在JDK8里面,你是可以突破这个界限的哦。那么如何在java接口中定义方法呢?下面跟本站小编一起来看看吧!
假设我们现在有一个接口:TimeClient,其代码结构如下:
import .*;
public interface TimeClient {
void setTime(int hour, int minute, int second);
void setDate(int day, int month, int year);
void setDateAndTime(int day, int month, int year,
int hour, int minute, int second);
LocalDateTime getLocalDateTime();
}
接下来,SimpleTimeClient类实现了TimeClient接口,具体代码如下:
package defaultmethods;
import .*;
import .*;
import .*;public class SimpleTimeClient implements TimeClient {
private LocalDateTime dateAndTime;
public SimpleTimeClient() {
dateAndTime = ();
}
public void setTime(int hour, int minute, int second) {
LocalDate currentDate = (dateAndTime);
LocalTime timeToSet = (hour, minute, second);
dateAndTime = (currentDate, timeToSet);
}
public void setDate(int day, int month, int year) {
LocalDate dateToSet = (day, month, year);
LocalTime currentTime = (dateAndTime);
dateAndTime = (dateToSet, currentTime);
}
public void setDateAndTime(int day, int month, int year,
int hour, int minute, int second) {
LocalDate dateToSet = (day, month, year);
LocalTime timeToSet = (hour, minute, second);
dateAndTime = (dateToSet, timeToSet);
}
public LocalDateTime getLocalDateTime() {
return dateAndTime;
}
public String toString() {
return ring();
}
public static void main(String... args) {
TimeClient myTimeClient = new SimpleTimeClient();
tln(ring());
}
}
现在假设你想在接口TimeClient中添加一个新功能,通过这个功能我们可以指定我们所在的时区。
public interface TimeClient {
void setTime(int hour, int minute, int second);
void setDate(int day, int month, int year);
void setDateAndTime(int day, int month, int year,
int hour, int minute, int second);
LocalDateTime getLocalDateTime();
ZonedDateTime getZonedDateTime(String zoneString); }
随着TimeClient的变化,你不得不修改你的SimpleTimeClient类,实现getZonedDateTime方法。一般来说,设置时区这个功能会是各个TimeClient实现类中通用的一个功能。这个时候,你通常会选择再定义一个AbstractTimeClient类来实现getZonedDateTime方法。而在JDK8中,你可以选择直接在接口中来实现该方法(interface已经把手伸到abstract class的地盘了)。
package defaultmethods;
import .*;
public interface TimeClient {
void setTime(int hour, int minute, int second);
void setDate(int day, int month, int year);
void setDateAndTime(int day, int month, int year,
int hour, int minute, int second);
LocalDateTime getLocalDateTime();
static ZoneId getZoneId (String zoneString) {
try {
return (zoneString);
} catch (DateTimeException e) {
tln("Invalid time zone: " + zoneString +
"; using default time zone instead.");
return emDefault();
}
}
default ZonedDateTime getZonedDateTime(String zoneString) {
return (getLocalDateTime(), getZoneId(zoneString));
}
}
从上面的例子,我们可以看到通过static和default修饰符我们可以直接在接口中实现方法体,同时不要忘记,任何在接口中方法声明都是public类型的'哦。
OK,现在我们需要一个新的接口:AnotherTimeClient,它得继承TimeClient接口。那么,对于TimeClient接口中定义的getZonedDateTime方法,你可以做如下三种处理:
重新声明getZonedDateTime方法,使它变成abstract类型。
重新定义getZonedDateTime方法。
直接继承。
而static方法和我们在类里面定义的static方法概念一致。
-
J2EE程序员的技术标准是什么
J2EE核心是一组技术规范与指南,其中所包含的各类组件、服务架构及技术层次,均有共同的标准及规格,让各种依循J2EE架构的不同平台之间,存在良好的兼容性,解决过去企业后端使用的信息产品彼此之间无法兼容,企业内部或外部难以互通的窘境。下面小编整理的关于J2EE程序员...
-
J2EE学习中一些值得研究的项目
J2EEweb层组件可以是JSP页面或Servlets.按照J2EE规范,静态的HTML(标准通用标记语言下的一个应用)页面和Applets不算是web层组件。下面是小编整理的关于J2EE学习中一些值得研究的项目,欢迎大家参考!接着我研究了MOM4J、OpenJMS、Mocki、HSQLD……发现这些就是J2EE...
-
计算机二级VFP数据库真题及答案2016
一、选择题1、设有订单表0rder(其中包含字段:订单号,客户号.职员号,签订日期,金额),删除2002年1月1日以前签订的订单记录,正确的SQL命令是()^TETABLEorderWHERE签订日期<{^2002-1-1}TETABLEorderWHILE签订日期<{^2002-1-1}TEFROMorderWHERE签订日期<{^2002-1.1}TEFRO...
-
我的JavaEE学习路线图
从学习Java开发到现在虽然也已经快三年了,但是要说到分享一下经验实在是不敢当。权当是对自己的一个总结吧,希望大家不吝指教,互相交流。照旧,还是现来整理一下我学习Java的一个路线图吧,然后按照这个路线图来谈谈我的一些感受。一、Java核心这是学习Java的基础,掌握...