摘要:在抽象類中,聲明的是,可是。抽象類只能作為子類的超類,子類繼承抽象類時(shí)必須被實(shí)現(xiàn)。它根本不存在方法的實(shí)現(xiàn)實(shí)現(xiàn)子類使用關(guān)鍵字來繼承抽象類。添加新方法如果你往抽象類中添加新的方法,你可以給它提供默認(rèn)的實(shí)現(xiàn)。轉(zhuǎn)自,抽象類與接口的區(qū)別
抽象類與接口
抽象類與接口一樣,都不能被實(shí)例化,可以有具體實(shí)現(xiàn)的方法,也可以有抽象的方法。在抽象類中,聲明的field是static、final,method可是public、protected、private。而在接口中,聲明的field是public、static、final,method是public。
抽象類只能作為子類的超類,子類繼承抽象類時(shí)abstract method必須被實(shí)現(xiàn)。
接口是抽象方法的集合。如果實(shí)現(xiàn)了這個(gè)接口,那么就必須確保使用這些方法。接口只是一種形式,接口自身不能做任何事情。
在以下情況,可以考慮用abstract class:
You want to share code among several closely related classes.
You expect that classes that extend your abstract class have many common methods or fields, or require access modifiers other than public (such as protected and private).
You want to declare non-static or non-final fields. This enables you to define methods that can access and modify the state of the object to which they belong.
在以下情況,可以考慮用interface:
You expect that unrelated classes would implement your interface. For example, the interfaces Comparable and Cloneable are implemented by many unrelated classes.
You want to specify the behavior of a particular data type, but not concerned about who implements its behavior.
You want to take advantage of multiple inheritance of type.
詳細(xì)區(qū)別參數(shù) | 抽象類 | 接口 |
---|---|---|
默認(rèn)的方法實(shí)現(xiàn) | 它可以有默認(rèn)的方法實(shí)現(xiàn) | 接口完全是抽象的。它根本不存在方法的實(shí)現(xiàn) |
實(shí)現(xiàn) | 子類使用extends關(guān)鍵字來繼承抽象類。如果子類不是抽象類的話,它需要提供抽象類中所有聲明的方法的實(shí)現(xiàn)。 | 子類使用關(guān)鍵字implements來實(shí)現(xiàn)接口。它需要提供接口中所有聲明的方法的實(shí)現(xiàn) |
構(gòu)造器 | 抽象類可以有構(gòu)造器 | 接口不能有構(gòu)造器 |
與正常Java類的區(qū)別 | 除了你不能實(shí)例化抽象類之外,它和普通Java類沒有任何區(qū)別 | 接口是完全不同的類型 |
訪問修飾符 | 抽象方法可以有public、protected和default這些修飾符 | 接口方法默認(rèn)修飾符是public。你不可以使用其它修飾符。 |
main方法 | 抽象方法可以有main方法并且我們可以運(yùn)行它 | 接口沒有main方法,因此我們不能運(yùn)行它。 |
多繼承 | 抽象方法可以繼承一個(gè)類和實(shí)現(xiàn)多個(gè)接口 | 接口只可以繼承一個(gè)或多個(gè)其它接口 |
速度 | 它比接口速度要快 | 接口是稍微有點(diǎn)慢的,因?yàn)樗枰獣r(shí)間去尋找在類中實(shí)現(xiàn)的方法。 |
添加新方法 | 如果你往抽象類中添加新的方法,你可以給它提供默認(rèn)的實(shí)現(xiàn)。因此你不需要改變你現(xiàn)在的代碼。 | 如果你往接口中添加方法,那么你必須改變實(shí)現(xiàn)該接口的類。 |
importnew,Java抽象類與接口的區(qū)別.
orcale docs,Abstract Methods and Classes.
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://m.specialneedsforspecialkids.com/yun/64107.html
摘要:前言是面對(duì)對(duì)象的語言,因此有必要單獨(dú)紀(jì)錄下對(duì)象的各種定義和理解。面對(duì)對(duì)象基本概述概述是基于面向過程的變成思想,是對(duì)面向過程的一種封裝。面對(duì)對(duì)象開發(fā)就是不斷的創(chuàng)建對(duì)象,使用對(duì)象,指揮對(duì)象做事情。面對(duì)對(duì)象設(shè)計(jì)其實(shí)就是在管理和維護(hù)對(duì)象之間的關(guān)系。 前言 java是面對(duì)對(duì)象的語言,因此有必要單獨(dú)紀(jì)錄下對(duì)象的各種定義和理解。 面對(duì)對(duì)象,主要包括:面向?qū)ο笏枷耄惻c對(duì)象及其使用,對(duì)象的內(nèi)存圖,成...
摘要:很多常見的面試題都會(huì)出諸如抽象類和接口有什么區(qū)別,什么情況下會(huì)使用抽象類和什么情況你會(huì)使用接口這樣的問題。在討論它們之間的不同點(diǎn)之前,我們先看看抽象類接口各自的特性。抽象類抽象類是用來捕捉子類的通用特性的。 很多常見的面試題都會(huì)出諸如抽象類和接口有什么區(qū)別,什么情況下會(huì)使用抽象類和什么情況你會(huì)使用接口這樣的問題。本文我們將仔細(xì)討論這些話題。 在討論它們之間的不同點(diǎn)之前,我們先看看抽象類...
摘要:抽象類和接口抽象類抽象方法是只有方法簽名,沒有方法實(shí)現(xiàn)的方法。抽象類不能被實(shí)例化,抽象類可以包含方法抽象和普通成員變量構(gòu)造器初始化塊內(nèi)部類接口枚舉種成分。抽象類的構(gòu)造器不能用于創(chuàng)建實(shí)例,主要用于被其子類調(diào)用。 抽象類和接口 1.抽象類 抽象方法是只有方法簽名,沒有方法實(shí)現(xiàn)的方法。有抽象方法的類只能被定義成抽象類,抽象類可以沒有抽象方法。抽象方法和抽象類必須使用abstract修飾符來定...
摘要:自從轉(zhuǎn)到前段,差不多有一年時(shí)間沒有動(dòng)了,今天老弟問我關(guān)于的面向?qū)ο螅约翰桓抑苯踊卮鹆耍苍S自己真的應(yīng)該去做相關(guān)的考究了。要有父類引用指向子類對(duì)象。外部類要訪問內(nèi)部類的成員,必須要建立內(nèi)部類的對(duì)象。 自從轉(zhuǎn)到前段,差不多有一年時(shí)間沒有動(dòng)Java了,今天老弟問我關(guān)于Java的面向?qū)ο螅约翰桓抑苯踊卮鹆耍苍S自己真的應(yīng)該去做相關(guān)的考究了。然后在告訴他吧,記在這里當(dāng)做一個(gè)筆記吧。 什么...
摘要:案例演示抽象類的成員特點(diǎn)抽象類的成員方法特性抽象方法強(qiáng)制要求子類做的事情。抽象類中定義的是該繼承體系的共性功能。 1.多態(tài)的概述及其成員訪問特點(diǎn)代碼體現(xiàn) A:多態(tài)(polymorphic)概述 事物存在的多種形態(tài) B:多態(tài)前提- 1.要有繼承關(guān)系 2.要有方法重寫 3.要有父類引用指向子類對(duì)象。 C:多態(tài)中的成員訪問特點(diǎn)之 成員變量:編譯和運(yùn)行都看父類。 成員方法:編...
閱讀 1029·2021-11-23 10:11
閱讀 3866·2021-11-16 11:50
閱讀 935·2021-10-14 09:43
閱讀 2720·2021-10-14 09:42
閱讀 2719·2021-09-22 16:02
閱讀 1064·2019-08-29 10:57
閱讀 3385·2019-08-29 10:57
閱讀 2275·2019-08-26 13:52