Java接口如何定义方法
Java接口的方法都是public、abstract类型的,没有方法体的。但是在JDK8里面,你是可以突破这个界限的哦。那么如何在java接口中定义方法呢?下面跟yjbys小编一起来看看吧!
假设我们现在有一个接口: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方法概念一致。
-
2016年二级Java模拟试题及答案
1、以下不是Java中有效的关键字。A、constB、NULLC、falseD、this本题考查的是Java的关键字。Java中常量null,false,true,new,this,const,break都是小写。故本题答案为B。2、关于被私有访问控制符private修饰的成员变量,以下说法正确的是。A、可以被三种类所引用:该类...
-
Java程序中使用浮点数和小数的技巧
许多程序员在其整个开发生涯中都不曾使用定点或浮点数,可能的例外是,偶尔在计时测试或基准测试程序中会用到。下面小编准备了关于Java程序中使用浮点数和小数的技巧,欢迎大家参考!虽然几乎每种处理器和编程语言都支持浮点运算,但大多数程序员很少注意它。这容易理...
-
怎么安装java环境
JAVA是一门强大的语言,很多编程人员对其情有独钟。下面yjbys小编为大家分享怎么安装java环境,希望对大家有所帮助!第一种方法:(自动配置)你可以直接下载MyEclipse6.0或者以上版本(6.0以下的据说不行)来用,这个不用安装环境(自动设置了环境变量)。直接安装就可以使...
-
Java远程通讯可选技术及原理
一个最基础的问题就是远程服务是怎么通讯的,在Java领域中有很多可实现远程通讯的技术,例如:RMI、MINA、ESB、Burlap、Hessian、SOAP、EJB和JMS等,这些名词之间到底是些什么关系呢,它们背后到底是基于什么原理实现的呢,了解这些是实现分布式服务框架的基础知识,而如果...