【Java知識點】面試中會問到的那些小知識(2),為什么介面中沒有構造方法而抽象類中有構造方法?
- 前言
- 一、介面
- 二、抽象類
- 三、構造方法
- 介面與抽象類的語法區別
- 總結
- 參考文章
前言
本文與之后的幾篇文章將是某整理的學習筆記,在此與諸位分享
以下是本篇文章正文內容,該系列會持續更新,敬請關注,
正如面向物件四大特性(抽象、封裝、繼承、多型)所述,定義類的程序就是抽象和封裝的程序,而介面與抽象類則是對物體類進行更高層次的抽象,僅定義公共行為和特征,
介面與抽象類的共同點是都不能被實體化,但可以定義參考變數指向實體物件,
先來了解介面、抽象類、構造方法的概念:
一、介面
- 介面是一種行為規范
- 在Java編程語言中是一個抽象型別,是抽象方法的集合
- 一個類通過實作介面的方式,來實作介面中的抽象方法
- 介面側重定義任意的類有沒有相同語意的方法,它是一個一經定義不輕易更改的規范
二、抽象類
- 如果一個類中沒有包含足夠的資訊來描繪一個具體的物件,那么這樣的類就是抽象類
- 抽象類側重于歸納同一父類的子類的共同特征,例如屬性、方法
三、構造方法
- 構造方法是方法名與類名相同的特殊方法,在新建物件時呼叫
- 可以通過不同的構造方法實作不同方式的物件初始化
- 它用來在物件初始化前對物件進行一些預處理,提供了實體化一個具體東西的入口
介面與抽象類的語法區別
| 語法維度 | 抽象類 | 介面 |
|---|---|---|
| 定義關鍵字 | abstract | interface |
| 子類繼承或實作關鍵字 | extends | implements |
| 方法實作 | 可以有 | 不能有,但在JDK8及以后,允許有default實作 |
| 方法訪問控制符 | 無限制 | 有限制,默認是public abstract型別 |
| 屬性訪問控制符 | 無限制 | 有限制,默認是public static final型別 |
| 靜態方法 | 可以有 | 不能有,但在JDK8及以后,允許有 |
| static{}靜態代碼塊 | 可以有 | 不能有 |
| 本型別之間擴展 | 單繼承 | 多繼承 |
| 本型別之間擴展關鍵字 | extends | extends |
總結
為什么介面中不能有構造方法,而抽象類中有構造方法
構造方法的使命就是在構造方法時進行傳參操作
- 由此可以認為,因為介面定義時并不包含引數串列,所以介面中不能有也沒必要有構造方法
- 介面只是宣告,不一定要進行初始化,即使進行初始化也可以在實作介面的類中初始化
- 抽象類中需要有構造方法,是供子類創建物件時,初始化父類成員使用的
- 因為子類的構造方法中,有默認的super(),需要訪問父類構造方法
參考文章
《碼出高效:Java開發手冊》
java介面有建構式嗎_介面為什么不能有建構式
介面和抽象類的區別,實不相瞞,我忘記了?
同時也推薦看看這些文章
普歌-允異團隊-【Java知識點】這些Java學習路上你必須知道的底層原理(1)Java類加載的機制/static、final關鍵字/堆、堆疊
普歌-逆越團隊:Java基礎知識點(運行背景,程式開發三步驟,入門知識點)
- 作者:CEMER216
- 本文著作權歸作者和CSDN共有,歡迎轉載,且在文章頁面明顯位置給出原文鏈接,未經作者同意必須保留此段宣告,否則保留追究法律責任的權利,
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/272465.html
標籤:java
上一篇:Java物件創建的程序具體分析
