介面和抽象類 (abstract)
一、抽象類:
被implement類;
被implement修飾的方法稱為:抽象方法,抽象方法只有方法宣告沒有方法體;
抽象類特點:
1.不能被例項化,只能被繼承;
2.抽象類是否包含抽象方法均可,也可以包含普通方法;包含抽象方法的類一定要宣告為抽象類;
3.抽象方法的修飾符只能有:public 、protect 和 defalut,預設是public
4.一個類繼承抽象類,則子類必須實現抽象類的抽象方法,否則子類也必須定義為抽象類;
5.抽象類可以包含:屬性、方法、構造方法,但構造方法不能用來例項化物件,只能被子類呼叫;
二、介面:
介面是一種特殊的類,只能用interface修飾
介面特點:
1.介面中可以包含:屬性和方法;
2.介面可以支援多繼承,即:一個介面可以
3.一個類可以實現多個介面,一個類實現某個介面則必須實現介面中的抽象方法,否則該類必須定義為抽象類;
三、相同點:
1.均不能被例項化
2.兩者都包含抽象方法,實現介面或繼承抽象類的普通子類必須實現這些抽象方法
四、區別:
1.功能性:
介面:定義規範,類似於:系統總綱
抽象類:抽象出子類通用特性,體現的是模版式設計
2.實現:
介面:子類使用implements關鍵字實現介面,需要提供介面中所有宣告方法的實現;
介面可以extends 另一個介面
抽象類:子類使用extends來繼承抽象類,如果子類不是抽象類,則需要提供抽象類所有宣告方法的實現;
3.訪問修飾符:
介面:public
抽象類:public 、protected 和defalut
3.方法:
介面:不能包含普通方法;
抽象類:可以包含普通方法;
4.變數:
介面:只能定義靜態常量,不能定義普通成員變數;
抽象類:既可以定義靜態常量,也可以定義普通成員變數;
5.構造方法:
介面:無
抽象類:構造方法不是用於建立物件,而是讓其他子類呼叫這些構造方法來完成屬於抽象類的初始化操作;
6.初始化塊:
介面:無
抽象類:可以包含;
7.main方法:
介面:無
抽象類:可以有
8.與普通java類的區別:
介面:是完全不同的型別
抽象類:抽象類不能被例項化,其他方面與普通類沒有任何區別;
9.執行速度:
介面:稍慢
抽象類:比介面快
五、應用場景:
1.如果有一些方法並想讓它們有預設實現,則使用抽象類;
2.如果想實現多重繼承,使用介面;
3.如果基本功能不斷改變,則使用抽象類;
相關文章
- PHP中的 抽象類(abstract class)和 介面(interface)PHP抽象
- PHP 中的抽象類(abstract class)和介面(interface)PHP抽象
- abstract類和介面
- TypeScript abstract 抽象類TypeScript抽象
- 抽象類和介面抽象
- 介面和抽象類抽象
- c# abstract抽象類及抽象方法_繼承C#抽象繼承
- 走進C# abstract,瞭解抽象類與介面的異同C#抽象
- java中抽象類和介面Java抽象
- Java關鍵字之abstract(抽象類的概念和使用)Java抽象
- java中的抽象類abstract怎麼使用?Java抽象
- 介面和抽象類的區別抽象
- Java基礎-抽象類和介面Java抽象
- 抽象類和介面的區別抽象
- c# abstract抽象類_非抽象類_virtual_虛方法_override重寫C#抽象IDE
- C++中的抽象基類(Abstract Base Class)C++抽象
- 抽象類和介面,你瞭解多少?抽象
- Java抽象(方法,類)和Java的介面Java抽象
- 抽象類與介面抽象
- 抽象類VS介面抽象
- 介面與抽象類抽象
- 抽象類和介面的相同點和不同點抽象
- java介面和抽象類的簡單理解Java抽象
- 關於抽象類和介面的初步理解抽象
- Java中抽象類和介面的區別Java抽象
- JAVA中介面和抽象類的區別Java抽象
- PHP物件和介面抽象類注意事項PHP物件抽象
- JMockit學習之mock介面和抽象類Mock抽象
- 我如何理解Java中抽象類和介面Java抽象
- 深入理解Java的介面和抽象類Java抽象
- C# OOP:繼承,介面和抽象類C#OOP繼承抽象
- Java的抽象類 & 介面Java抽象
- JavaSE第三章 物件導向 抽象類 abstractJava物件抽象
- 抽象方法和抽象類抽象
- 抽象類和抽象方法抽象
- 結合實戰理解 Java 抽象類和介面Java抽象
- Java學習筆記之介面和抽象類Java筆記抽象
- 我是如何理解Java抽象類和介面的Java抽象