Hello,你好呀,我是
灰小猿!一個超會寫bug的程式猿!
用堅持締造技術、用指尖敲動未來!
和很多小伙伴們一樣,我也是一名奔波在Java道路上的“創造者”,也想靠技術來改未來,改變世界!因為我們堅信每一次敲動鍵盤都能讓生活變得更智能、世界變得更有趣!
在此專欄《Java核心面試寶典》記錄我們備戰夢想的【day 8】!

面向物件作為我們在Java編程的核心思想,在面試上的考察點還是非常的多的,之前已經和小伙伴們總結了兩篇有關面向物件的面試題了,今天繼續~~~
1、在繼承關系中,子類是不是父類的子集?
子類不是父類的子集,子類包含父類所有的類成員,同時還有自己特有的成員變數,所以子類通常包含比父類更多的類成員,
2、定義繼承關系時,父類和子類之間應存在什么關系?
父類與子類之間應存在is-a的關系
3、super關鍵字的作用是什么?
關鍵字 super 指向當前類的的父類,關鍵字 super 可以用于兩種途徑,一是呼叫父類的構造方法,二是呼叫父類的方法,
呼叫父類的構造方法,使用 super() 或 super(引數),該陳述句必須是子類構造方法的第一個陳述句,且這是呼叫父類構造方法的唯一方式,
呼叫父類的方法,使用 super.方法名(引數),
4、有繼承關系時,構造方法的呼叫順序是怎樣的?
構造一個類的實體時,會沿著繼承鏈呼叫所有父類的構造方法,父類的構造方法在子類的構造方法之前呼叫,即構造方法的呼叫順序是從父類到子類的,
如下面的實體:
public class Class3 extends Class2 {
public static void main(String[] args) {
new Class3();
}
public Class3() {
System.out.println("D");
}
}
class Class2 extends Class1 {
public Class2() {
this("B");
System.out.println("C");
}
public Class2(String s) {
System.out.println(s);
}
}
class Class1 {
public Class1() {
System.out.println("A");
}
}
解釋一下上面的程式:由于 Class2 是 Class1 的子類,Class3 是 Class2 的子類,因此在 Class3 的構造方法中的所有陳述句運行之前,先呼叫 Class2 的無引數構造方法,Class2 的無引數構造方法呼叫了有引數構造方法,在 Class2 的有引數構造方法中的所有陳述句運行之前,先呼叫 Class1 的無引數構造方法,因此,運行上述代碼得到的輸出結果是:
A
B
C
D
5、重寫中,子類的方法回傳值型別是否可以與父類的不完全一致?
如果回傳值型別是基本資料型別或void,則必須保持一致,如果父類的回傳值是參考資料型別,則子類的回傳值型別必須與父類一致或者是父類回傳值型別的子類,
6、重寫和多載的區別是什么?
多載是指一個類中定義多個方法,這些方法有相同的名稱,但是方法的簽名不同;
重寫是指在子類中定義一個方法,該方法與父類中的該方法的簽名相同,回傳值型別相同或者子類回傳值是父類方法回傳值的子類,
| 多載 | 重寫 | |
|---|---|---|
| 場合 | 同一個類 | 父類和子類 |
| 方法名稱 | 相同 | 相同 |
| 方法簽名 | 不同 | 相同 |
| 回傳值型別 | 可以不同 | 相同或者子類回傳值型別是父類回傳值型別的子類 |
7、可見性修飾符protected表示可以從哪里訪問類成員?
可見性修飾符 protected 表示類成員可以在同一個包里的任何類中訪問,也可以在繼承了該類的子類中訪問,
8、關鍵字final用于修飾類和方法時,其含義是什么?
使用final修飾的類是終極類,不能被繼承,使用final修飾的方法不能被子類重寫,
9、什么是native方法?
關鍵字native表示實作方法的編程語言不是Java
10、判斷兩個物件內容是否相等時,是否可以使用“== ”?應該使用什么方法?
判斷兩個物件內容是否相等應該使用equals方法,而不能使用“ == ”,“==”的作用是判斷兩個物件是否具有相同的參考,
11、重寫equals方法有什么要求?
根據散列約定,如果兩個物件相同,他們的散列碼一定相同,因此如果重寫了equals方法,必須重寫hashCode方法,以保證兩個相等的物件對應的散列碼是相同的,
12、說一說Object類中的finalize方法?
protected void finalize() throws Throwable
finalize方法用于垃圾回收,如果一個物件不能再被訪問,就變成了垃圾,finalize 方法會被該物件的垃圾回收程式呼叫,該方法的默認實作不做任何事,如果必要,子類應該重寫該方法,
該方法可能拋出 Throwable 例外,所以輕易不要重寫finalize()方法,否則會導致垃圾回收出現問題,從而產生記憶體泄露問題
今日總結
今天和大家分享有關繼承和Object類的一些常見面試題,我們需要掌握繼承中的呼叫順序,方法重寫和多載的區別,equals和“==”的區別等,
面向物件的面試題比較多,之后還會繼續總結,如果小伙伴們有遇到其他相關的面試題,歡迎在評論區留言提出,我會把大家提出的總結到文章內`, 歡迎小伙伴們一起評論區打卡學習!小伙伴們可也在左方加我好友一起探討學習!
我是灰小猿,我們下期見!

轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/292018.html
標籤:java
