介面和抽象類

2021-10-12 06:31:11 字數 1847 閱讀 9192

下面字段宣告中哪乙個在inte***ce主體內是合法的? ()

正確答案: b 你的答案: c (錯誤)

a. private final static int answer = 42;

b. public static int answer = 42;

c. final static answer = 42;

d. int answer;

在介面中,屬性都是預設public static final修飾的,所以:

​ a(錯誤):不能用private修飾;

​ b(正確):在介面中,屬性預設public static final,這三個關鍵字可以省略;

​ c(錯誤):沒寫屬性的型別;

​ d(錯誤):final修飾的屬性必須賦值;( final修飾的屬性不能說必須賦值,後面可以要麼靜態塊裡賦 要麼構造器裡賦值 ; 確實如此,但是在介面中沒有靜態塊和構造器,介面中的屬性是必須直接賦值的 )

介面中的屬性在不提供修飾符修飾的情況下,會自動加上public static final

注意(在1.8的編譯器下可試):

(1)屬性不能用private,protected,default 修飾,因為預設是public

(2)如果屬性是基本資料型別,需要賦初始值,若是引用型別,也需要初始化,因為預設有final修飾,必須賦初始值;

(3)介面中常規的來說不能夠定義方法體,所以無法通過get和set方法獲取屬性值,所以屬性不屬於物件,屬於類(介面),因為預設使用static修飾 (介面中不可以定義方法?可以定義方法,但是不可以定義方法體,jdk1.8中為了加強介面的能力,介面可以存在具體的方法,前提是方法需要被default或者static關鍵字修飾.)

jdk1.8之前

介面1.多實現

2.變數型別預設且只能為為public static final

3.函式型別預設且只能為public,只能有public型別的靜態成員函式

4.非靜態成員函式沒有方法體(public abstract),靜態成員函式有方法體

5.子類必須實現所有介面函式

6.可以有main方法;可以new乙個介面,需要在方法體中實現所有介面函式

7.沒有構造器

抽象類1.單繼承

2.變數型別不限(靜態變數+非靜態變數)

3.函式型別不限(靜態函式+非靜態函式)

4.非靜態函式包含沒有方法體的抽象函式. 有方法體的普通函式

5.子類可以不覆寫父類的抽象方法,但子類也要申明為抽象類;子類可以選擇覆寫父類的非抽象方法

6.可以有main方法;不可以new乙個抽象類

7.可以有構造器

jdk1.8

介面中可以有default型別的方法,實現類可以選擇實現該方法

意義:預設方法的主要優勢是提供一種拓展介面的方法,而不破壞現有**。另乙個優勢為該方法是可選的,子類可以根據不同的需求override或缺省實現。

下面哪些情況下需要使用抽象類?

正確答案: a b d 你的答案: a b d (正確)

當乙個類的乙個或多個方法是抽象方法時

當類是乙個抽象類的子類,並且不能為任何抽象方法提供任何實現細節或方法體時

當乙個類實現多個介面時

當乙個類實現乙個介面,並且不能為任何抽象方法提供實現細節或方法體時

a項 乙個類中有抽象方法則必須申明為抽象類

b項 抽象類中的抽象方法必須由其子類實現,若子類不能實現則子類也必須定義為抽象類

d項 乙個類實現乙個介面就必須實現其中所有的抽象方法,若該實現類不能實現介面中的所有方法則實現類定義為抽象類

介面和抽象類

介面和抽象類 今天自學了一下介面,從第一次接觸介面又進一步理解介面的原理。想到介面或許我們更多的是想到和類的對比,而類中抽象類和介面又更為相似。現在我講下我對介面和抽象類的理解。如果單從具體 來看,對這兩個概念很容易模糊,甚至覺得介面就是多餘的,因為單從具體功能來看,除多重繼承外 c 抽象類似乎完全...

抽象類和介面

抽象類 1.是一種特殊的類,除了不能被例項化外,具有類得其他特性.2.抽象類的方法可以不宣告為abstract,此時可以實現方法提 如果宣告為abstract,則不可以實現方法體,只能宣告,如 public abstract int remove int i,int j 此時類必須宣告為抽象 3.乙...

抽象類和介面

1.抽象類 含有abstract修飾符的類即為抽象類。可用於實現 重用。抽象類與普通類的唯一區別 不能建立例項物件 允許有抽象方法,但不必須是抽象的。抽象類中定義的抽象方法必須在具體子類中實現,所以不能有抽象構造方法或抽象靜態方法 如果沒有全部實現抽象父類的抽象方法,子類也要定義為抽象型別。2.介面...