- 相關(guān)推薦
Java接口如何定義方法
Java接口的方法都是public、abstract類型的,沒有方法體的。但是在JDK8里面,你是可以突破這個(gè)界限的哦。那么如何在java接口中定義方法呢?下面跟yjbys小編一起來看看吧!
假設(shè)我們現(xiàn)在有一個(gè)接口:TimeClient,其代碼結(jié)構(gòu)如下:
import java.time.*;
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類實(shí)現(xiàn)了TimeClient接口,具體代碼如下:
package defaultmethods;
import java.time.*;
import java.lang.*;
import java.util.*;public class SimpleTimeClient implements TimeClient {
private LocalDateTime dateAndTime;
public SimpleTimeClient() {
dateAndTime = LocalDateTime.now();
}
public void setTime(int hour, int minute, int second) {
LocalDate currentDate = LocalDate.from(dateAndTime);
LocalTime timeToSet = LocalTime.of(hour, minute, second);
dateAndTime = LocalDateTime.of(currentDate, timeToSet);
}
public void setDate(int day, int month, int year) {
LocalDate dateToSet = LocalDate.of(day, month, year);
LocalTime currentTime = LocalTime.from(dateAndTime);
dateAndTime = LocalDateTime.of(dateToSet, currentTime);
}
public void setDateAndTime(int day, int month, int year,
int hour, int minute, int second) {
LocalDate dateToSet = LocalDate.of(day, month, year);
LocalTime timeToSet = LocalTime.of(hour, minute, second);
dateAndTime = LocalDateTime.of(dateToSet, timeToSet);
}
public LocalDateTime getLocalDateTime() {
return dateAndTime;
}
public String toString() {
return dateAndTime.toString();
}
public static void main(String... args) {
TimeClient myTimeClient = new SimpleTimeClient();
System.out.println(myTimeClient.toString());
}
}
現(xiàn)在假設(shè)你想在接口TimeClient中添加一個(gè)新功能,通過這個(gè)功能我們可以指定我們所在的時(shí)區(qū)。
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類,實(shí)現(xiàn)getZonedDateTime方法。一般來說,設(shè)置時(shí)區(qū)這個(gè)功能會(huì)是各個(gè)TimeClient實(shí)現(xiàn)類中通用的一個(gè)功能。這個(gè)時(shí)候,你通常會(huì)選擇再定義一個(gè)AbstractTimeClient類來實(shí)現(xiàn)getZonedDateTime方法。而在JDK8中,你可以選擇直接在接口中來實(shí)現(xiàn)該方法(interface已經(jīng)把手伸到abstract class的地盤了)。
package defaultmethods;
import java.time.*;
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 ZoneId.of(zoneString);
} catch (DateTimeException e) {
System.err.println("Invalid time zone: " + zoneString +
"; using default time zone instead.");
return ZoneId.systemDefault();
}
}
default ZonedDateTime getZonedDateTime(String zoneString) {
return ZonedDateTime.of(getLocalDateTime(), getZoneId(zoneString));
}
}
從上面的例子,我們可以看到通過static和default修飾符我們可以直接在接口中實(shí)現(xiàn)方法體,同時(shí)不要忘記,任何在接口中方法聲明都是public類型的哦。
OK,現(xiàn)在我們需要一個(gè)新的接口:AnotherTimeClient,它得繼承TimeClient接口。那么,對(duì)于TimeClient接口中定義的getZonedDateTime方法,你可以做如下三種處理:
重新聲明getZonedDateTime方法,使它變成abstract類型。
重新定義getZonedDateTime方法。
直接繼承。
而static方法和我們?cè)陬惱锩娑x的static方法概念一致。
【Java接口如何定義方法】相關(guān)文章:
Java數(shù)組定義常用方法09-28
區(qū)分Java中抽象類和接口的方法10-06
Java中接口的使用06-19
如何區(qū)分Java中抽象類和接口09-15
Java的接口和抽象類07-09
jQuery定義插件的方法07-24
色彩如何定義建筑09-14
常見液晶顯示器的接口定義是什么09-27
Java自定義線程池相關(guān)代碼09-14
如何定義企業(yè)文化09-04