当前位置:学者斋 >

IT认证 >JAVA认证 >

Java接口如何定义方法

Java接口如何定义方法

Java接口的方法都是public、abstract类型的,没有方法体的。但是在JDK8里面,你是可以突破这个界限的哦。那么如何在java接口中定义方法呢?下面跟yjbys小编一起来看看吧!

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方法概念一致。

  • 文章版权属于文章作者所有,转载请注明 https://xuezhezhai.com/itrz/java/do1m3.html