15道類和對象面試題,快看看自己會幾道

###

1.類與對象有哪些區別?

類是一個抽象的概念,是對某一事物的描述;而對象是類的實例,是實實在在存在的個體。

比如:“男人”就是一個類(一個概念),而老田(田維常)就是實實在在的一個“對象”。

注意:對象中又有類對象,即Class對象,但是類對象始終還是對象,不是類,這兩個概念別搞混淆了。

2.Java 中可以多繼承嗎?

Java 中只能單繼承,但可以實現多接口,並且支持多層繼承。

3.Java 中為什麼不能實現多繼承?

答:從技術的實現角度來説,是為了降低編程的複雜性。假設 A 類中有一個 m() 方法,B 類中也有一個 m() 方法,如果 C 類同時繼承 A 類和 B 類,那調用 C 類的 m() 方法時就會產生歧義,這無疑增加了程序開發的複雜性,為了避免這種問題的產生,Java 語言規定不能多繼承類,但可以實現多接口。

4.覆蓋和重載有哪些區別?

重寫(Override)從字面上看,重寫就是 重新寫一遍的意思。其實就是在子類中把父類本身有的方法重新寫一遍。子類繼承了父類原有的方法,但有時子類並不想原封不動的繼承父類中的某個方法,所以在方法名,參數列表,返回類型(除過子類中方法的返回值是父類中方法返回值的子類時)都相同的情況下, 對方法體進行修改或重寫,這就是重寫。但要注意子類函數的訪問修飾權限不能少於父類的。

15道類和對象面試題,快看看自己會幾道

重寫 總結:

1.發生在父類與子類之間

2.方法名,參數列表,返回類型(除過子類中方法的返回類型是父類中返回類型的子類)必須相同

3.訪問修飾符的限制一定要大於被重寫方法的訪問修飾符(public>protected>default>private)

4.重寫方法一定不能拋出新的檢查異常或者比被重寫方法的更加寬泛的檢查型異常

重載(Overload)在一個類中,同名的方法如果有不同的參數列表(參數類型不同、參數個數不同甚至是參數順序不同)則視為重載。同時,重載對返回類型沒有要求,可以相同也可以不同,但不能通過返回類型是否相同來判斷重載。

15道類和對象面試題,快看看自己會幾道

重載 總結:1.重載Overload是一個類中多態性的一種表現 2.重載要求同名方法的參數列表不同(參數類型,參數個數甚至是參數順序) 3.重載的時候,返回值類型可以相同也可以不相同。無法以返回型別作為重載函數的區分標準。

5.為什麼方法不能根據返回類型來區分重載?

答:因為在方法調用時,如果不指定類型信息,編譯器就不知道你要調用哪個方法了。比如,以下代碼:

15道類和對象面試題,快看看自己會幾道

因為 max(1,2) 沒有指定返回值,編譯器就不知道要調用哪個方法了。

6.説説構造方法的特點有哪些?

答:構造方法的特徵如下:

構造方法必須與類名相同;

構造方法沒有返回類型(默認返回本類類型);

構造方法不能被繼承、覆蓋、直接調用;

類定義時提供了默認的無參構造方法;

構造方法可以私有,外部無法使用私有構造方法創建對象。

構造函數能不能被覆蓋?能不能被重載?

構造函數可以重載,但不能覆蓋。

7.以下程序執行的結果是?

15道類和對象面試題,快看看自己會幾道

結果是:251346

8.類加載順序

整體

15道類和對象面試題,快看看自己會幾道

細分

15道類和對象面試題,快看看自己會幾道

以下程序執行的結果是?

15道類和對象面試題,快看看自己會幾道

結果是:00B

注意:在 Java 語言中,變量不能被重寫。

9.Java 中的 this 和 super 有哪些區別?

this 和 super 都是 Java 中的關鍵字,起指代作用,在構造方法中必須出現在第一行,它們的區別如下。

基礎概念:this 是訪問本類實例屬性或方法;super 是子類訪問父類中的屬性或方法。

查找範圍:this 先查本類,沒有的話再查父類;super 直接訪問父類。

使用:this 單獨使用時,表示當前對象;super 在子類覆蓋父類方法時,訪問父類同名方法。

10.在靜態方法中可以使用 this 或 super 嗎?為什麼?

在靜態方法中不能使用 this 或 super,因為 this 和 super 指代的都是需要被創建出來的對象,而靜態方法在類加載的時候就已經創建了,所以沒辦法在靜態方法中使用 this 或 super。

11.靜態方法的使用需要注意哪些問題?

靜態方法的使用需要注意以下兩個問題:

靜態方法中不能使用實例成員變量和實例方法;

靜態方法中不能使用 this 和 super。

12.final 修飾符的作用有哪些?

final也是很多面試喜歡問的地方,但我覺得這個問題很無聊,通常能回答下以下5點就不錯了:

被final修飾的類不可以被繼承

被final修飾的方法不可以被重寫

被final修飾的變量不可以被改變.如果修飾引用,那麼表示引用不可變,引用指向的內容可變.

被final修飾的方法,JVM會嘗試將其內聯,以提高運行效率

被final修飾的常量,在編譯階段會存入常量池中.

除此之外,編譯器對final域要遵守的兩個重排序規則更好:

在構造函數內對一個final域的寫入,與隨後把這個被構造對象的引用賦值給一個引用變量,這兩個操作之間不能重排序 初次讀一個包含final域的對象的引用,與隨後初次讀這個final域,這兩個操作之間不能重排序.

經典使用場景:Integer,String等類中有使用到。

13.覆蓋 equals() 方法的時候需要遵守哪些規則?

Oracle 官方的文檔對於 equals() 重寫制定的規則如下。

自反性:對於任意非空的引用值 x,x.equals(x) 返回值為真。

對稱性:對於任意非空的引用值 x 和 y,x.equals(y) 必須和 y.equals(x) 返回相同的結果。

傳遞性:對於任意的非空引用值 x、y 和 z,如果 x.equals(y) 返回值為真,y.equals(z) 返回值也為真,那麼 x.equals(z) 也必須返回值為真。

一致性:對於任意非空的引用值 x 和 y,無論調用 x.equals(y) 多少次,都要返回相同的結果。在比較的過程中,對象中的數據不能被修改。

對於任意的非空引用值 x,x.equals(null) 必須返回假。

此題目不要求記憶,能知道大概即可,屬於加分項題目。

14.在 Object 中 notify() 和 notifyAll() 方法有什麼區別?

notify() 方法隨機喚醒一個等待的線程,而 notifyAll() 方法將喚醒所有在等待的線程。

如何使用 clone() 方法?

如果是同一個類中使用的話,只需要實現 Cloneable 接口,定義或者處理 CloneNotSupportedException 異常即可,請參考以下代碼:

15道類和對象面試題,快看看自己會幾道

對象克隆是原型模式的經典實現。

15.java中對象的創建方式有哪幾種?

java中提供了以下四種創建對象的方式:

new創建新對象

通過反射機制

採用clone機制

通過序列化機制

版權聲明:本文源自 網絡, 於,由 楠木軒 整理發佈,共 2713 字。

轉載請註明: 15道類和對象面試題,快看看自己會幾道 - 楠木軒