標籤:
1.final修飾變數時,是引用不能變,還是引用的對象不能變?
是指引用變數不能變,引用對象的內容可以變。
2.==和equals有什麼區別?
網上搜尋一下,發現很多人解釋的都比較清楚了。自己簡單概括一下。
==符號用於比較變數的值,如果是數值則直接比較就行,如果是參考型別,包括字串類型,是比較引用對象的地址。但當比較String a= "Monday";String b ="Monday";if(a == b){System.out.println("a == b");}時是輸出a == b的。下面的解釋粘貼複製的。程式在啟動並執行時候會建立一個字串緩衝池當使用 s2 = "Monday" 這樣的表達是建立字串的時候,程式首先會在這個String緩衝池中尋找相同值的對象,在這個程式中,a先被放到了池中,所以在b被建立的時候,程式找到了具有相同值的 a,將b引用a所引用的對象"Monday".若使用Sting b = new String("Monday");就不會輸出a==b了。因為此時變數值不同。
equals是比較兩個對象是否相同的正確方法。但若想比較對象的內容是否相同,應該重寫父類的equals函數,明確指出相等的條件。否則預設是比較對象的引用地址。但比較字串類型時會和==有所不同,使用new建立時,也會輸出相等。
3.overload 和override的區別是什嗎?overload的方法是否可以改變傳回值的類型?
overload是重載,override是重寫。
重載的方法名稱相同,參數類型列表不同(參數順序和類型),傳回值可以相同可以不同,可以有不同的存取修飾詞,可以拋出不同的異常,但傳回值、修飾符、異常都不能決定這個方法是否是重載。
重寫發生在子類中,重寫的函數和父類的方法名,參數列表相同,傳回值可以是父類傳回值的子類,存取修飾詞的限制一定要大於被重寫方法的存取修飾詞(public>protected>default>private),重寫方法一定不能拋出新的檢查異常或者比被重寫方法申明更加寬泛的檢查型異常。
4.建構函式是否可以被override?
建構函式是不能被繼承的,只能在子類初始化時調用,所以不存在重寫問題,建構函式只能在一個類中被重載。
5.介面是否可以繼承介面?抽象類別是否可以實現介面?抽象類別是否可繼承具體類?抽象類別中是否可以有靜態main方法?
介面可以通過繼承建立新的子介面。抽象類別可以實現介面
抽象類別是否可繼承具體類:抽象類別是可以繼承實體類,但前提是實體類必須有明確的建構函式
答案很明確,可以繼承。其實從Object就是個實體類,java的API文檔裡,每個抽象類別的條目裡都明確寫著直接或間接繼承自Object,所以這點是沒有疑問的。
關鍵在於這答案裡所說的“前提是實體類必須有明確的建構函式”一句,是什麼意思。
抽象類別中可以包含靜態main方法。
6.如何?多態機制?
多態時在運行時刻介面匹配的對象能互相替換的能力。它的關鍵是:運行時、介面匹配、天。它是一種後期綁定機制。
實現多態的步驟:繼承,重寫,針對父類編程,運行時,介面替換。
7.abstract class和interface有什麼區別?
(1)介面中不能有構造方法。
(2)介面中沒有普通成員變數,只有常量。
(3)介面中的方法必須都是抽象的,不能有非抽象的普通方法。
(4)介面中的抽象方法只能是public類型的,預設為public abstract類型。
(5)介面中不能包含靜態方法。
(6)抽象類別和介面中都可以包含靜態成員變數。但介面中定義的變數只能是public static final 類型,並且預設為public static final 類型。
(7)一個類可以實現多個介面,但只能繼承一個類。
8.抽象方法可以是static的嗎?
Java求職實戰之繼承和多態