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】題目:打印出所有的"水仙花數",所謂"水仙花數"是指一個三位數,其各位數字立方和等於該數本身。例如:153是一個"水仙花數",因為153=1的三次方+5的三次方+3的三次方。1.程序分析:利用for循環控制100-999個數,每個數分解出個位,十位,百位。【程序2】題目:古典問題:有...
-
關於Java堆、棧和常量池的介紹
常量池指在java用於保存在編譯期已確定的,已編譯的class文件中的一份數據。下面小編準備了關於Java堆、棧和常量池的介紹,歡迎大家參考!1.寄存器:最快的存儲區,由編譯器根據需求進行分配,我們在程序中無法控制。2.棧:存放基本類型的變量數據和對象的引用,但對象本身不...
-
Java命令參數説明大全
為了提高性能,往往需要調整java命令參數,以求系統達到最佳新能。另外這些參數的配置也是影響系統穩定性的一個重要因素,相信大多數Java開發人員都見過OutOfMemory類型的錯誤。這其中很可能就是JVM參數配置不當或者就沒有配置沒意識到配置引起的。那麼java命令參數...
-
java考試習題及答案
選擇題3、在JavaApplet程序用户自定義的Applet子類中,一般需要重載父類的(D)方法來完成一些畫圖操作。A.start()B.stop()C.init()D.paint()3、Java語言具有許多優點和特點,下列選項中,哪個反映了Java程序並行機制的特點?BA)安全性B)多線程C)跨平台D)可移植4、下列...