抽象類和接口的區別?

2021-02-19 享學課堂online
這道題想考察什麼?

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 之後接口是允許有方法實現的。

相關焦點

  • 抽象類和接口的區別
    【編者按】本文作者是Sebastian Malaca,是面向對象編程的狂熱者,不斷深化研究整潔代碼和高代碼質量。本文中,作者通過多個方面深入剖析抽象類和接口的區別,並結合經驗供讀者借鑑學習。在開發人員崗位面試時,是否了解抽象類和接口之間的基本區別是一個很重要的考量因素。顯而易見?完全不是。
  • Java抽象類與接口的區別
    很多常見的面試題都會出諸如抽象類和接口有什麼區別,什麼情況下會使用抽象類和什麼情況你會使用接口這樣的問題。
  • 解|Java中抽象類和接口的區別
    在Java語言中, abstract class 和interface 是支持抽象類定義的兩種機制。正是由於這兩種機制的存在,才賦予了Java強大的 面向對象能力。abstract class和interface之間在對於抽象類定義的支持方面具有很大的相似性,甚至可以相互替換,因此很多開發者在進行抽象類定義時對於abstract class和interface的選擇顯得比較隨意。
  • Java中抽象類和接口的介紹及二者間的區別
    抽象類和普通類的主要有三點區別:1、抽象方法必須為public或者protected(因為如果為private,則不能被子類繼承,子類便無法實現該方法),預設情況下默認為public。2、抽象類不能用來創建對象;3、如果一個類繼承於一個抽象類,則子類必須實現父類的抽象方法。如果子類沒有實現父類的抽象方法,則必須將子類也定義為為abstract類。在其他方面,抽象類和普通的類並沒有區別。
  • 理解Java的接口和抽象類
    注意,抽象類和普通類的主要有三點區別:  1)抽象方法必須為public或者protected(因為如果為private,則不能被子類繼承,子類便無法實現該方法),預設情況下默認為public。  2)抽象類不能用來創建對象;  3)如果一個類繼承於一個抽象類,則子類必須實現父類的抽象方法。
  • Java開發中抽象類和接口都有什麼區別?
    Java在Java軟體開發中抽象類和接口會有一個明顯的區別,具體會有哪些區別呢?下文就兩者的區別做了一個比較詳細的描述。抽象類抽象類:1、抽象類使用abstract修飾;2、抽象類不能實例化,即不能使用new關鍵字來實例化對象
  • 深入理解Java的接口和抽象類
    下面是本文的目錄大綱:一.抽象類二.接口三.抽象類和接口的區別一.抽象類在了解抽象類之前,先來了解一下抽象方法。抽象方法是一種特殊的方法:它只有聲明,而沒有具體的實現。抽象方法的聲明格式為:abstract void fun();抽象方法必須用abstract關鍵字進行修飾。
  • 程序進階:Java的抽象類和接口介紹
    具體的代碼例子大家可以參考下面的圖片:在學習的過程中我們要學會對比,在前面我們已經定義了類,那麼抽象類和普通類的區別是什麼呢?其實仔細觀察二者的特點就可以發現抽象類和普通類之間的區別,通過代碼對比我們可以發現實際上抽象類相比於普通類,只是在類定義的時候多定義了一個抽象方法,除了不能直接進行對象的實例化之外沒有其它區別。
  • 淺析java繼承與多態,抽象類與接口的區別
    為什麼是需求描述,因為接口只是定義行為方法,並不實現方法,而繼承它的類規定必須實現接口定義的方法。類通過實現接口定義的方法而受接口的約束,所以說接口是類的需求描述和行為規範。接口和類是兩種不同的數據類型。
  • 論Java中的抽象類與接口
    目錄抽象類和抽象方法定義與普通類的區別以及注意點:(下面的代碼中,我將其子類的重寫方法注釋掉之後,就會報錯must be declared abstract or implentment abstract method)與普通類的區別以及注意點:抽象類也是可以與普通類那樣,可以直接extends,區別在於抽象類不能直接實例化
  • 我如何理解Java中抽象類和接口
    在面試中我們經常被問到:Java中抽象類和接口的區別是什麼?
  • java面試題總結:java的接口類和抽象類的特點
    java的接口類和抽象類的特點java中抽象類的特點:
  • JavaSE基礎知識學習---抽象類和接口
    什麼叫抽象類在java中,因為繼承,使得類越來越具體化,類的設計使得父類越來越通用,在類的設計裡應該保證父類和子類能夠共享特徵,有時候就把父類設計的非常抽象,讓它沒有具體的實例。這樣的類就叫抽象類,例如人可以說話,但是不同的人可能說的話不一樣,所以讓說話的內容由子類自己決定。
  • Java中的接口與抽象類:有什麼區別?
    什麼是接口?接口是可用於實現類的藍圖。接口不包含任何具體方法(有代碼的方法)。接口的所有方法都是抽象的方法。無法實例化接口。但是,可以實例化實現接口的類。接口從來不包含實例變量,但它們可以包含公共靜態最終變量(即常量類變量)。什麼是抽象類?在聲明中包含抽象關鍵字的類稱為抽象類。抽象類至少應該有一個抽象方法。即沒有身體的方法。它可以有多種具體的方法。抽象類允許您為具體類創建藍圖。但是繼承類應該實現抽象方法。
  • Java 抽象類、接口
    如果一個類含有抽象方法,則稱這個類為抽象類,抽象類必須在類前用abstract關鍵字修飾。它有以下特點:1.抽象類可以有抽象方法,也可以沒有。可以有普通方法,也可以沒有。可以不實現,這時普通類需要添加abstract變成一個抽象類。public abstract Class extends ClassName{}4.抽象類中可以有成員變量和成員方法。
  • 如何在Java中選擇接口和抽象類
    在Java中,我們有接口和抽象類。 在選擇哪一個時,我們給出了一些條件,比如選擇支持多重繼承的接口,或者選擇一個抽象類來提供父類中幾個方法的實現(儘管從Java 8開始,我們可以在接口中給出默認方法實現)。
  • 深入解析面試常問的Java 接口與抽象類問題
    對於一個父類,如果它的某個方法在父類中實現出來沒有任何意義,必須根據子類的實際需求來進行不同的實現,那麼就可以將這個方法聲明為abstract方法,此時這個類也就成為abstract類了。包含抽象方法的類稱為抽象類,但並不意味著抽象類中只能有抽象方法,它和普通類一樣,同樣可以擁有成員變量和普通的成員方法。
  • 如何區分Java中的抽象類(abstract class)和接口(interface)?
    1、相同點①抽象類和接口都不能實例化,但可以聲明。Student student = new Student();∥錯誤②一個類繼承了某個抽象類,或實現了某個接口,其中的抽象方法全部都必須要實現,否則該類仍然需要聲明為抽象類(abstract class)。
  • java中接口和抽象類更適合在什麼時候應用
    java接口是由誰演變而來的,就是抽象類,接口是一種特殊形式的抽象類,使用接口完全有可能實現與抽象類相同的操作。相同點:都不能被實例化;接口的實現類或者抽象類的子類都必須實現了接口或抽象類中的方法後才可以被實例化;可以定義抽象類和接口類的引用。
  • 一篇文章帶你了解Java中的抽象類和接口知識
    、一篇文章帶你了解this關鍵字和單例模式、Java基礎入門篇——面向對象和類的定義,這篇文章帶大家一起學習下Java知識中的抽象類和接口知識,一起來看看吧。抽象類特點:① 有抽象方法的類只能被定義成抽象類,但抽象類可以沒有抽象方法。