1.是否熟悉抽象類和接口的定義,區別?
2.是否熟悉 Java 8 之後的接口變化?
考察的知識點1.抽象類和接口的定義,區別
2.Java 8 之後的接口變化
考生應該如何回答1、考生首先應該回答抽象類和接口的定義和區別,接口和抽象類是 Java 面向對象設計的兩個基礎機制。
接口是對行為的抽象,它是抽象方法的集合,利用接口可以達到 API 定義和實現分離的目的。接口,不能實例化;不能包含任何非常量成員,任何 field 都是隱含著 public static final 的意義;同時,沒有非靜態方法實現,也就是說要麼是抽象方法,要麼是靜態方法。
Java 標準類庫中,定義了非常多的接口,比如 java.util.List。
抽象類是不能實例化的類,用 abstract 關鍵字修飾 class,其目的主要是代碼重用。除了不能實例化,形式上和一般的 Java 類並沒有太大區別,可以有一個或者多個抽象方法,也可以沒有抽象方法。
抽象類大多用於抽取相關 Java 類的共用方法實現或者是共同成員變量,然後通過繼承的方式達到代碼復用的目的。Java 標準庫中,比如 collection 框架,很多通用部分就被抽取成為抽象類,例如 java.util.AbstractSequentialList。
Java類實現接口 interface 使用 implement 關鍵字,繼承抽象類 abstract class 則是使用 extends 關鍵字。我們可以參考Java 中的 LinkedList 的實現方式:
public class LinkedList<E> extends AbstractSequentialList<E> implements List<E>, Deque<E>, Cloneable, java.io.Serializable{下面來說一下兩者的區別(暫不包含 Java 8 及其以上版本):
2、從 Java 8 開始,interface 增加了對 default method 的支持。Java 9 以後,甚至可以定義 private default method。Default method 提供了一種二進位兼容的擴展已有接口的辦法。比如,我們熟知的 java.util.Collection,它是 collection 體系的 root interface,在 Java 8 中添加了一系列 default method,主要是增加 Lambda、Stream 相關的功能。前面提到的類似 Collections 之類的工具類,很多方法都適合作為 default method 實現在基礎接口裡面。
public interface Collection<E> extends Iterable<E> { default Stream<E> stream() { return StreamSupport.stream(spliterator(), false); }}總結考生回答該問題時應該對抽象類和接口的定義有清晰的認知,知道兩者之間的區別和使用場景,同時也要注意Java 8 之後接口是允許有方法實現的。