四11、面向對象的特徵有哪些方面 java
四大特徵你們都知道:抽象、繼承、封裝、多態。這是個理解性表述題,每一個人的表述方式可能都不同。下面僅選擇一種做爲參考: 程序員
1.抽象: 數據結構
抽象——就是忽略一個主題中與當前目標無關的那些方面,以便更充分地注意與當前目標有關的方面。(就是把現實世界中的某一類東西,提取出來,用程序代碼表示,抽象出來通常叫作類或者接口) 抽象並不打算了解所有問題,而只是選擇其中的一部分,暫時不用部分細節。抽象包括兩個方面,一是數據抽象,二是過程抽象。 函數
數據抽象——就是用代碼的形式表示現時世界中一類事物的特性,就是針對對象的屬性。好比創建一個鳥這樣的類,鳥都有如下屬性:一對翅膀、兩隻腳、羽毛等。抽象出來的類都是鳥的屬性,或者成員變量。 spa
過程抽象——就是用代碼形式表示現實世界中事物的一系列行爲,就是針對對象的行爲特徵。好比鳥會飛、會叫等。抽象出來的類通常都是鳥的方法。 操作系統
2.繼承: htm
繼承是一種聯結類的層次模型,而且容許和鼓勵類的重用,它提供了一種明確表述共性的方法。對象的一個新類能夠從現有的類中派生,這個過程稱爲類繼承。新類繼承了原始類的特性,新類稱爲原始類的派生類(子類),而原始類稱爲新類的基類(父類)。派生類能夠從它的基類那裏繼承方法和實例變量,而且類能夠修改或增長新的方法使之更適合特殊的須要。所以能夠說,繼承是爲了重用父類代碼,同時爲實現多態性做準備。 對象
3.封裝: 繼承
封裝是把過程和數據包圍起來,對數據的訪問只能經過已定義的界面。面向對象計算始於這個基本概念,即現實世界能夠被描繪成一系列徹底自治、封裝的對象,這些對象經過一個受保護的接口訪問其餘對象。封裝隱藏了類的內部實現機制,從而能夠在不影響使用者的前提下保護類的內部結構,同時保護了數據。 接口
4. 多態性(相同的行爲,不一樣的實現方式):
多態性是指容許不一樣類的對象對同一消息做出響應。多態性包括參數化多態性和包含多態性。多態性語言具備靈活、抽象、行爲共享、代碼共享的優點,很好的解決了應用程序函數同名問題。總的來講,方法的重寫、重載與動態連接構成多態性。Java引入多態的概念緣由之一就是彌補類的單繼承帶來的功能不足。(爲規避C++中多繼承形成的複雜繼承問題,java採用單繼承。)
動態連接——對於父類中定義的方法,若是子類中重寫了該方法,那麼父類類型的引用將會調用子類中的這個方法,這就是動態連接。
四12、&和&&的區別?
相同點:它們均可以做爲邏輯與的運算符,當表達式兩邊的結果都爲true時結果才爲true,只要一方爲false,結果就爲false。
不一樣點:
①&&具備短路功能,即第一個表達式爲false時,就再也不計算第二個表達式了,因此更高效一些。
②&還能夠做爲位運算符,當表達式兩邊不是boolean類型時,&表示按位與操做。
四十3、heap 和stack有什麼區別?
堆棧經常連起來講,其實它們的區別挺多的,下面列舉一些主要的:
1.stack是棧,heap是堆。
2.stack的空間由操做系統自動分配和釋放,地址是由高向低減小的;heap的空間是手動申請和釋放的,地址是由低向高增加的,heap經常使用new關鍵字來分配。
3.stack空間有限,heap的空間是很大的自由區。
4.棧是一種線形集合,是一塊連續的內存區域,其添加和刪除元素的操做應在同一段完成。棧按照後進先出的方式進行處理。堆是向高地址擴展的數據結構,是不連續的內存區域,堆採用鏈表方式來存儲空閒內存地址。因此堆得到的空間比較靈活。
5.效率比較:棧由系統自動分配,速度快,但程序員沒法控制,靈活性差。
堆通常由new分配內存,速度比較慢,並且容易產生碎片,不過使用方便。
6.在Java中,若只是聲明一個對象,則先在棧內存中爲其分配地址空間,若再new一下,實例化它,則在堆內存中爲其分配地址。
四十4、Static Nested Class 和Inner Class 的不一樣?
(1)Nested Class(嵌套類) 通常是C++的說法,Inner Class(內部類) 通常是JAVA的說法。Java內部類與C++嵌套類最大的不一樣就在因而否有指向外部的引用上。
(2)通常狀況下,Nested Class可分爲Static Nested Class和Inner Class。
區別是:
Static Nested Class對象的建立不依賴於外部類的對象。靜態內部類只能訪問外部類的靜態成員。
而Inner Class則不一樣,它的對象的建立依賴於外部類的對象。其既能夠訪問外部類的靜態成員也能夠訪問非靜態成員。
使用內部類優勢:
⒈ 內部類對象能夠訪問建立它的對象的實現,包括私有數據;
⒊ 使用內部類能夠很方便的編寫事件驅動程序;
⒋ 匿名內部類能夠方便的定義運行時回調;