2013-Java基礎面試題-Java類與類之間的關係

1)下載自百度文庫,抱歉無法找到原文的出處,所以沒法給出原文的鏈接;

2)在閱讀過程中,個人感覺有一小部分內容有欠缺;

3)個人有文字潔癖,原文的錯別字和排版問題比較多;


1. 用代碼表示A類關聯B類的情況

解析:一個Java應用中不可能只有一個類,所以瞭解類之間的關係對程序員來說非常重要。關聯關係是最常用的一種關係,如果說A關聯B,那麼就是B作爲A的屬性存在。關聯關係是一種複用的策略,即A關聯B的時候,A可以複用B的行爲。

參考答案:

Class A{
Private B b;
Public void setB(B b){
This.b=b;
}
}


2.請說明Java語言中數組的基本概念,數組的作用,以及數組的聲明創建方式

解析:數組是任何一門語言裏都常用的類型,Java語言也不例外。程序員瞭解數組,不能僅僅從語法上了解,而應該深入理解數組的作用。數組可以用來存儲類型相同的元素,作爲一種數據容器使用。和數組類似的概念是集合,也能作爲數據容器使用。

參考答案:數組是相同元素的集合,作爲數據容器使用。聲明創建一個int型數組,如下所示:int[]x = new int[3];其中3是數組的長度,該數組能夠存儲3個int型變量。

 

3.使用代碼,創建一個長度爲5的String型數組,並使用增強for循環迭代數組打印出數組中的元素。

解析:增強for循環是JDK5增加的特性,可以方便地遍歷數組或集合。程序員需要了解的是,如果JDK版本低於5.0,則不支持這個功能。另外,並不是說有了增強for循環後,傳統的for循環就不被使用,增強for循環只能用來方便地遍歷數組和集合,其他情況下還要使用傳統的for循環。

參考答案:

String[] sArray = new String[5];
For(Strings:sArray){
	System.out.println(s);
}

4.說明Arrays類的作用。

解析:在實際工作中,常常需要對數組中的元素進行處理,例如排序等。初級程序員往往選擇自己編寫算法實現。實際上API中提供了Arrays類,該類中定義了很多和數組有關的工具方法,能夠方便地處理數組,是程序員必須掌握的類。

參考答案:Arrays類是java.util包中的一個類,類中所有的方法都是static方法,這些方法都是數組對象的工具方法,能夠對數組進行處理,如sort方法可以對數組元素進行排序

 

5.請使用簡單代碼展示A類依賴B類的含義(注意和2.1中的關聯進行區分)。

解析:對於程序員來說,瞭解類和類之間的關係非常必要。依賴關係指的是一種瞬間的關係。如果A依賴B,一般指的是A類的某個行爲,需要B類對象作爲參數。

參考答案:

ClassA{
Publicvoid f(B b)
}


6.請說明依賴關係和關聯關係的區別。

解析:關聯關係和依賴關係是非常常見的兩種關係,二者的區別也很明顯,程序員瞭解二者的區別能夠更深入的理解面向對象的思想。

參考答案:依賴關係是一種瞬時關係,A依賴B,指的是A的某個行爲的參數是B的類型,也就是說,A要想實現這個行爲,必須依賴B的實例,A關聯B,是一種長久的關係。是B作爲A的屬性存在,只要實例化一個A的對象,就會爲這個A的對象實例化一個B的對象,作爲它的屬性使用,可以在A中任何需要使用B的地方使用B。

 

7.繼承有什麼作用,Java語言中的繼承有什麼特點?

解析:繼承是面嚮對象語言的一大特徵,主要作用是重複使用,子類通過繼承父類,能夠重複使用父類的屬性和方法。值得注意的是,有兩個策略都可使實現重複使用,一個是關聯,一個是繼承,實際編程中,關聯用的更多。因爲子類繼承父類後,相當於父類中的細節將暴露給子類。初級程序員一定不要隨意使用繼承,避免濫用繼承。(多用組合,少用繼承,這是oo的其中一條原則)

參考答案:繼承主要爲了能夠重複使用父類中的成員。Java語言中的繼承是單繼承,也就是說一個類最多隻能繼承一個父類。

 

8、什麼是方法覆蓋(override)?並說明方法覆蓋與方法重載(overioad)的區別。

解析:方法覆蓋是一個非常重要的概念,是多態性的一個體現。方法覆蓋發生在繼承關係中,當子類需要修改從父類繼承到的某個方法的方法體時,就可以聲明一個父類同名同參數同返回值的方法,這樣就對父類中的那個方法進行了覆蓋,子類對象調用該方法時將自動綁定到子類中的方法。API中很多類中都進行了方法覆蓋,如String類中的toString方法,就覆蓋了父類Object中的toString方法。

參考答案:覆蓋是發生在繼承關係的子類中,當子類要修改從父類繼承的某個方法的方法體時,就可以在子類中聲明一個與父類同名、同參數並且同返回值類型的方法,這就是方法覆蓋。而重載與繼承沒有關係,指的是在一個類中可以同時聲明多個同名但不同參數的方法,稱爲重載。

 

9、請說明什麼是抽象類?抽象類有什麼作用?

解析:初級程序員往往不需要自己創建抽象類,但是必須瞭解抽象類的概念,並且會使用抽象類。抽象類往往是設計階段的概念,用來定義多個子類的模板,一些具體的實現可以在子類中進行。初級程序員往往需要會創建子類繼承抽象類,實現抽象類中的方法。在API中,抽象類比比皆是。

參考答案:抽象類是不能實例化對象的類,使用abstract修飾。抽象類往往用來做父類使用,定義一些子類的共同屬性或行爲。

 

10、請說明抽象方法的含義,並說明抽象類與抽象方法的關係。

解析:抽象方法都是在抽象類中定義的,是用來定義子類what to do的策略,而具體的how todo都在子類中實現。

參考答案:抽象方法是沒有方法體的方法,使用abstract修飾。抽象類中不一定有抽象方法,但是有抽象方法的類一定是抽象類。

 

11、super關鍵字的兩種用法。

解析:使用一些IDE生成代碼時,常常會在構造方法中見到super這個關鍵字。顧名思義,super是和父類有關的一個關鍵字,熟悉super的用法對熟練掌握繼承很有必要。

參考答案:如super():表示調用父類中沒有參數的構造方法:又如super(10);表示調用父類中的具有一個整型參數的構造方法。第二種用法是在子類中調用父類中的成員,如super.f();意思是調用父類中的f()方法。

 

12、final類與final方法有什麼作用?

解析:final修飾符是一個用途非常廣泛的修飾符,可以修飾類,方法,以及屬性。

參考答案:final類是不能夠被繼承的類,稱爲終極類,如String類就是final類(稱之爲不可改變類),不能有子類。final修飾方法後,是終極方法,不能被子類覆蓋,但是可以被子類繼承使用。


13.什麼是多態函數?多態函數有什麼用?

解析:多態性是面嚮對象語言的的一大特徵,重載,覆蓋,多態參數是多態性的一種表現形式。多態參數處處可見,例如某方法f(Objecto),這個方法的參數類型是Object,使用該方法時,只要傳遞給f的參數類型是Object即可。也就是說,Object類的任意參數可以傳遞給f方法。這就是多態參數。意思是對外形式都一樣,都是Object,具體實現可以是這個類型的任意子類,這就使得該方法比較靈活,Object類即使有了新的子類,卻不需要修改,就能直接作用到那個子類。瞭解多態參數的含義和使用,對於Java的使用特別關鍵。

參考答案:多態函數就是參數的類型是某個父類類型,具體爲這個參數賦值的不同以使用該父類的任意子類的對象。使用多態參數,可以使程序的擴展性更好,即使%%%%的子類方法不需要任何修改,就能接受子類類型進行處理。


14.Object類有什麼特點?

解析:Object類是一個非常重要的類,是所有類的父類,包括數組在內,也就是對一個Java類,不管是API中定義的,還是自定義的類,都直接或間接的繼承了Object類。所以,如果有一個方法f(Objecto),那麼可以傳遞給這個方法任意一個類的對象。因爲所有對象都可以說是Object類型。

參考答案:Object類是所有類的直接或間接的父類。


15.Object類中的toString方法有什麼用?

解析:Object類是所有類的父類,所以Object類中的方法是所有類都默認具備的。類中的toString 方法可以將任意一個對象作爲字符串返回,默認的格式是“類名@內地”API中很多類已經覆蓋了這個方法,將其返回值的格式進行了自定義,如String類中的方法已經覆蓋爲返回字符串的字符序列。

參考答案:toString方法可以把對象作爲字符串返回。


16.Object類中的equals方法和hashCode 方法。

解析:在Object類中,equals方法比較對象的引用值,也就是隻有物理上是同一對象的兩個引用,在使用equals方法返回true。hashCode方法返回一個對象的內在地址的十六進制值。由於Object類是所有類的父類,所以任意類中都擁有這兩個方法,並都可以進行覆蓋。尤其是操作Set,Map對象時集合元素類的equals方法和hashCode方法非常必要,因爲Set和Map判斷元素是否重複是依靠這兩個方法進行。一般的原則是:如果存在X和Y兩個對象,調用X.equals(Y)相同時,那麼調用hashCode方法返回值也應該相同;如果X.equals(Y)返回false時,那麼調用hashCode方法返回值可能相同,也可能不同。值得注意的是,只要你覆蓋了equals方法,一定覆蓋hashCode 方法。在實際工作中,很多IDE環境都支持覆蓋equals和hashCode 方法。

參考答案:Object類中的equals方法用來比較兩個引用值,hashCode用來返回引用對象內在地址的十六進制數值。在Set以及Map集合中,判斷兩個元素是否重複時,往往需要使用這兩個方法。這兩個方法往往被子類覆蓋,覆蓋的規則是:如果存在x和y兩個對象,調用x.equals(y)返回true時,那麼調用hashCode方法的返回值也該相同;如果x.equals(y)返回false時,那麼調用hashCode方法返回的值可能相同,也可能不同。

 

17.接口有什麼特點,與抽象類有什麼區別?

解析:接口概念是一個設計層面的概念,初級程序員往往不會自己定義接口,但是會使用接口,理解接口的概念非常必要。接口定義了實現類的規範,即what to do的部分,所有實現類必須按照這個規範進行實現。

參考答案:接口的特點是不能定義變量,而且所有方法都是抽象方法。而抽象類中可以有變量,也不強制必須有抽象方法。

 

18.類繼承父類與類實現接口,有什麼區別?

解析:類繼承父類與類實現接口,本質上其實是一樣的。都是將父類或者接口作爲模板,在這個模板上進行擴展或者重寫。程序員在實際編程中,常常需要繼承父類或者實現接口。

參考答案:類繼承父類只是單繼承,也就是一個子類最多隻有一個父類;而類實現接口可以多實現,就是一個子類可以同時實現多個接口,並覆蓋所有接口中的所有抽象方法。

 

19.Comparable接口有什麼作用

 解析:comparable接口是在實際編程中常常使用的接口,該接口定義了comareTo(Object o)方法,用來定義對象的比較邏輯。這個接口常常在其他API中會強制使用,例如Arrays類的sort(Object[])方法,就強制數組元素必須實現Comparable接口,與這個接口類似的 另外一個接口是Comparator。

參考答案:Comparable接口定義了compareTo(Object o)方法,可以用來實現對象的比較邏輯,這個接口常常在其他API中強制使用,用來規範對象的比較邏輯。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章