標籤:
20、介面是否可繼承介面?抽象類別是否可實現(implements)介面?抽象類別是否可繼承具體類(concrete class)?抽象類別中是否可以有靜態main方法?
介面可以繼承介面。抽象類別可以實現(implements)介面,抽象類別可以繼承具體類。抽象類別中可以有靜態main方法。
備忘:只要明白了介面和抽象類別的本質和作用,這些問題都很好回答,你想想,如果你是java語言的設計者,你是否會提供這樣的支援,如果不提供的話,有什麼理由嗎?如果你沒有道理不提供,那答案就是肯定的了。
只有記住抽象類別與普通類的唯一區別:就是不能建立執行個體對象和允許有abstract方法。
21、寫clone()方法時,通常都有一行代碼,是什嗎?
clone 有預設行為,
super.clone();
22、物件導向的特徵有哪些方面
封裝:在物件導向的程式設計語言中,對象是封裝的最基本單位,物件導向的封裝就是把描述一個對象的屬性和行為的代碼封裝在一個“模組”中
抽象:抽象就是找出一些事物的相似和共性之處,然後將這些事物歸為一個類
繼承:在定義和實現一個類的時候,可以在一個已經存在的類的基礎之上來進行,把這個已經存在的類所定義的內容作為自己的內容,繼承是子類自動共用父類資料和方法的機制,這是類之間的一種關係,提高了軟體的可重用性和可擴充性。
多態:多態是指程式中定義的引用變數所指向的具體類型和通過該引用變數發出的方法調用在編程時並不確定,而是在程式運行期間才確定,即一個引用變數倒底會指向哪個類的執行個體對象,該引用變數發出的方法調用到底是哪個類中實現的方法,必須在由程式運行期間才能決定。
23、java中實現多態的機制是什嗎?
靠的是父類或介面定義的引用變數可以指向子類或具體實作類別的執行個體對象
24、abstract class(抽象類別)和interface(介面)有什麼區別?
含有abstract修飾符的class即為抽象類別,abstract類不能建立的執行個體對象。含有abstract方法的類必須定義為abstract class,abstract class類中的方法不必是抽象的。abstract class類中定義抽象方法必須在具體(Concrete)子類中實現,所以,不能有抽象構造方法或抽象靜態方法。如果的子類沒有實現抽象父類中的所有抽象方法,那麼子類也必須定義為abstract類型。
介面(interface)可以說成是抽象類別的一種特例,介面中的所有方法都必須是抽象的。介面中的方法定義預設為public abstract類型,介面中的成員變數類型預設為public static final。
下面比較一下兩者的文法區別:
1.抽象類別可以有構造方法,介面中不能有構造方法。
2.抽象類別中可以有普通成員變數,介面中沒有普通成員變數
3.抽象類別中可以包含非抽象的普通方法,介面中的所有方法必須都是抽象的,不能有非抽象的普通方法。
4. 抽象類別中的抽象方法的訪問類型可以是public,protected和(預設類型,雖然
eclipse下不報錯,但應該也不行),但介面中的抽象方法只能是public類型的,並且預設即為public abstract類型。
5. 抽象類別中可以包含靜態方法,介面中不能包含靜態方法
6. 抽象類別和介面中都可以包含靜態成員變數,抽象類別中的靜態成員變數的訪問類型可以任意,但介面中定義的變數只能是public static final類型,並且預設即為public static final類型。
7. 一個類可以實現多個介面,但只能繼承一個抽象類別。
25、什麼是內部類?內部類可以引用它的包含類的成員嗎?有沒有什麼限制?
內部類就是在一個類的內部定義的類,內部類中不能定義靜態成員。完全可以。如果不是靜態內部類,那沒有什麼限制!
26、String是最基本的資料類型嗎?
基礎資料型別 (Elementary Data Type)包括byte、int、char、long、float、double、boolean和short。
java.lang.String類是final類型的,因此不可以繼承這個類、不能修改這個類。為了提高效率節省空間的,我們應該用StringBuffer類
27、是否可以繼承String類?
String類是final類故不可以繼承。
28、String和StringBuffer的區別
JAVA平台提供了兩個類:String和StringBuffer,
它們可以儲存和操作字串,即包含多個字元的字元資料。這個String類提供了數值不可改變的字串。而這個StringBuffer類提供的字串進行修改。
當你知道字元資料要改變的時候你就可以使用StringBuffer。典型地,你可以使用StringBuffers來動態構造字元資料。另外,String實現了equals方法,new String(“abc”).equals(newString(“abc”)的結果為true,而StringBuffer沒有實現equals方法,所以,new StringBuffer(“abc”).equals(newStringBuffer(“abc”)的結果為false。
29、數組有沒有length()這個方法? String有沒有length()這個方法?
數組沒有length()這個方法,有length的屬性。String有有length()這個方法。
30、final, finally, finalize的區別。
final 用於聲明屬性,方法和類,分別表示屬性不可變,方法不可覆蓋,類不可繼承。
內部類要訪問局部變數,局部變數必須定義成final類型,例如,一段代碼……
finally是異常處理語句結構的一部分,表示總是執行。
finalize是Object類的一個方法,在垃圾收集器執行的時候會調用被回收對象的此方法,可以覆蓋此方法提供垃圾收集時的其他資源回收,例如關閉檔案等。JVM不保證此方法總被調用
JAVA面試題基礎部分(三)