JAVA认证 百分网手机站

Java接口如何定义方法

时间:2017-05-18 17:37:35 JAVA认证 我要投稿

Java接口如何定义方法

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

  假设我们现在有一个接口:TimeClient,其代码结构如下:

  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类实现了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());

  }

  }

  现在假设你想在接口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 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修饰符我们可以直接在接口中实现方法体,同时不要忘记,任何在接口中方法声明都是public类型的哦。

  OK,现在我们需要一个新的接口:AnotherTimeClient,它得继承TimeClient接口。那么,对于TimeClient接口中定义的getZonedDateTime方法,你可以做如下三种处理:

  重新声明getZonedDateTime方法,使它变成abstract类型。

  重新定义getZonedDateTime方法。

  直接继承。

  而static方法和我们在类里面定义的static方法概念一致。

【Java接口如何定义方法】相关文章:

1.Java数组定义常用方法

2.如何区分Java中抽象类和接口

3.Java中接口的使用

4.区分Java中抽象类和接口的方法

5.Java的接口和抽象类

6.IDE接口硬盘安装方法

7.Java自定义线程池相关代码

8.色彩如何定义建筑