面試例題1:下面哪一項說法是正確的? A.在一個子類中一個方法不是public的就不能被重載 B.覆蓋一個方法只需要滿足相同的方法名和參數類型就可以了 C.覆蓋一個方法必須需要相同的方法名參數和返回類型 D.一個覆蓋的方法必須有相同的方法名、參數名和參數類型 解析: 對於在同一可訪問區內被聲明的幾個具有不同參數列(參數的類型、個數、順序不同)的同名函數,程序會根據不同的參數列來確定具體調用哪個函數,這種機制叫重載,重載不關心函數的返回值類型。覆蓋是指派生類中存在重新定義的函數,其函數名、參數列、返回值類型必須同父類中的相對應被覆蓋的函數嚴格一致,覆蓋函數和被覆蓋函數只有函數體(花括號中的部分)不同,當派生類對象調用子類中該同名函數時會自動調用子類中的覆蓋版本,而不是父類中的被覆蓋函數版本,這種機制就叫做覆蓋。 成員函數被重載的特徵如下。 (1)相同的範圍(在同一個類中); (2)函數名字相同; (3)參數不同; (4)virtual關鍵字可有可無。 覆蓋的特徵如下。 (1)不同的範圍(分別位於派生類與基類); (2)函數名字相同; (3)參數相同; (4)基類函數必須有virtual關鍵字。 答案:C 面試例題2:下面的說法中哪項是正確的? A.靜態方法不能被覆蓋成非靜態的方法 B.靜態方法不能被聲明成私有的 C.私有的方法不能被重載 D.一個重載的方法在基類中不通過檢查不能拋異常 解析:JDK 1.1版本會發布這樣一個提示信息:靜態的方法不能被覆蓋。選項 B和C的說法並不合理,沒有合理的理由來說靜態的方法不能被聲明成私有的,或私有的方法不能被重載。選項D是對於一個覆蓋方法異常限制的混雜版本來說的。 答案:A 面試例題3:給定下面的代碼。 class Base {} class Agg extends Base{ public String getFields(){ String name = "Agg"; return name; } } public class Avf{ public static void main(String argv[]){ Base a = new Agg(); //Here } } What code placed after the comment //Here will result in calling the getFields method resulting in the output of the string "Agg"?(下面哪個選項的代碼替換到//Here,會調用getFields方法使輸出結果輸出字符串“Agg”?) A. System.out.println(a.getFields()); B.System.out.println(a.name); C.System.out.println((Base) a.getFields()); D.System.out.println( ((Agg) a).getFields()); 解析:Base類型要引用Agg類的實例需要把Base類顯示轉換爲Agg類,然後調用Agg類中的getFields()方法。如果a是Base類的一個實例的話,它要調用getFields()方法,那此方法在Base類中是不存在的,必須把a轉換爲Agg類的一個實例,這樣纔可以調用它裏面的方法。 答案:D 面試例題4:如果在下列代碼中的Here處添加一段代碼,問哪一個選項不能通過編譯[Trend公司2005年10月面試題] public class Upton{ public static void main(String argv[]){ } public void amethod(int i){} //Here } A.public int amethod(int z){} B.public int amethod(int i,int j){return 99;} C.protected void amethod(long l){} D.private void anothermethod(){} 解析:選項A不能通過編譯。一個方法是顯式地返回一個int值的方法,另一個是在同一個類中上述方法的一個重定義。方法中參數從i換做z對一個方法並沒有任何影響。一個方法不能在同一個類中被覆蓋。 答案:A 面試例題5:下面代碼的輸出結果是多少?[Trend公司2005年10月面試題] class A { public static void prt() { System.out.println("1"); }public A() { System.out.println("A"); } } public class B extends A { public static void prt() { System.out.println("2"); } public B() { System.out.println("B"); } public static void main(String[] args) { A a = new B(); a = new A(); } } 解析:每新建一個對象,都會產生一個構造函數,因爲產生構造函數的順序是A,B,A,所以結果是A,B,A。 答案:A,B,A 面試例題6:下面代碼的輸出結果是多少?[Trend公司2005年10月面試題] class Parent {protected String value = "123"; public String getValue() { return value; } } public class Child extends Parent { protected String value = "456"; } 解析:父類裏的東西也可以理解成你自己的東西。也就是說在程序裏面有兩個value,一個是123,另一個是456。而現在要輸出的是父類裏面的那個value,所以就是123。原因是在輸出語句中使用的是getValue()方法,而這個方法就是父類裏面的方法。它的返回值是父類裏面定義的value,從父類繼承來的沒有被子類覆蓋的方法操作的是繼承於父類的被隱藏的變量,也就是123。 答案:123 |
java面試題
日誌 > 技術交流
評論列表
溫馨提示:點擊驗證碼輸入框,以獲取驗證碼
請輸入驗證碼:
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.