java的基本特徵:封裝,繼承,多態

1、我們可以把JAVA中的類分爲以下三種:

類:使用class定義且不含有抽象方法的類。
抽象類:使用abstract class定義的類,它可以含有,也可以不含有抽象方法。
接口:使用interface定義的類。
在這三種類型之間存在下面的繼承規律:
類可以繼承(extends)類,可以繼承(extends)抽象類,可以繼承(implements)接口。
抽象類可以繼承(extends)類,可以繼承(extends)抽象類,可以繼承(implements)接口。
接口只能繼承(extends)接口。

2、繼承(inheritance)
繼承是使用已存在的類的定義作爲基礎建立新類的技術,新類的定義可以增加新的數據或新的功能,也可以用父類的功能,但不能選擇性地繼承父類。這種技術使得複用以前的代碼非常容易,能夠大大縮短開發週期,降低開發費用。
繼承是爲了重用父類代碼,同時爲實現多態性作準備。


3、封裝(encapsulation)

類使得數據和對數據的操作集成在一起,從而對使用該類的其他人來說,可以不管它的實現方法,而只管用它的功能,從而實現所謂的信息隱藏。 封裝隱藏了類的內部實現機制,從而可以在不影響使用者的前提下改變類的內部結構,同時保護了數據。

隱藏屬性,方法或者實現細節的過程,叫做封裝。

4、多態(polymorphism)
方法的重寫、重載與動態連接構成多態性。Java之所以引入多態的概念,原因之一是它在類的繼承問題上和C++不同,後者允許多繼承,這確實給其帶來的非常強大的功能,但是複雜的繼承關係也給C++開發者帶來了更大的麻煩,爲了規避風險,Java只允許單繼承,派生類與基類間有IS-A的關 系(即“貓”is a “動物”)。這樣做雖然保證了繼承關係的簡單明瞭,但是勢必在功能上有很大的限制,所以,Java引入了多態性的概念以彌補這點的不足,此外,抽象類和接口也是解決單繼承規定限制的重要手段。同時,多態也是面向對象編程的精髓所在。
多態又分爲設計時多態和運行時多態,例如重載又被稱爲設計時多態,而對於覆蓋或繼承的方法,JAVA運行時系統根據調用該方法的實例的類型來決定選擇調用哪個方法則被稱爲運行時多態。總而言之,面向對象的設計的典型特點就是繼承,封裝和多態,這些特點也是面向對象之所以能如此盛行的關鍵所在。
對於多態,可以總結它爲:
一、使用父類類型的引用指向子類的對象;該引用只能調用父類中定義的方法和變量;
二、如果子類中重寫了父類中的一個方法,那麼在調用這個方法的時候,將會調用子類中的這個方法;(動態連接、動態調用)
三、變量不能被重寫(覆蓋),”重寫“的概念只針對方法。

5、 接口的定義和類的定義很相似,只是關鍵字不同,關鍵字爲interface。聲明格式如下:interface 接口名{}
上面的大括號中爲接口體。接口體中包含成員變量定義和方法定義兩部分。
接口體中只進行方法的聲明,不允許提供方法的實現。所以在格式上只存在方法聲明,實際上沒有方法體,而方法體要在實現的類中再去具體定義。
還有一點需要說明的是:如果一個類使用了某個接口,就必須要實現這個接口的所有方法,即使實在沒有內容只是一個空的方法體也不許要寫。而且每個方法都默認是public的,所以實現時代碼一定要用public做修飾,參數個數,類型以及返回值的類型都必須與接口中的聲明相一致。
例如:
interface Runable { }

6、將一個方法調用同這個方法所屬的主體(也就是對象或類)關聯起來叫做綁定,分前期綁定和後期綁定兩種。下面解釋一下它們的定義:
前期綁定:在程序運行之前進行綁定,由編譯器和連接程序實現,又叫做靜態綁定。比如static方法和final方法,注意,這裏也包括private方法,因爲它是隱式final的。
後期綁定:在運行時根據對象的類型進行綁定,由方法調用機制實現,因此又叫做動態綁定,或者運行時綁定。除了前期綁定外的所有方法都屬於後期綁定。
7、 重寫,英文名是overriding,是指在繼承情況下,子類中定義了與其基類中方法具有相同型構的新方法,就叫做子類把基類的方法重寫了。這是實現多態必須的步驟。
重載,英文名是overloading,是指在同一個類中定義了一個以上具有相同名稱,但是型構不同的方法。在同一個類中,是不允許定義多於一個的具有相同型構的方法的。
8、接口與抽象類
abstract class和interface是Java語言中對於抽象類定義進行支持的兩種機制。
在abstract class方式中, 可以有自己的數據成員,也可以有非abstarct的成員方法,而在interface方式的實現中, 只能夠有靜態的不能被修改的數據成員(也就是必須是static final的,不過在interface中一般不定義數據成員),所有的成員方法都是abstract的。從某種意義上說,interface是一種特殊形式的abstract class。
抽象類裏面可以有非抽象方法但接口裏只能有抽象方法 聲明方法的存在而不去實現它的類被叫做抽象類(abstract class),它用於要創建一個體現某些基本行爲的類,併爲該類聲明方法,但不能在該類中實現該類的情況。不能創建abstract 類的實例。然而可以創建一個變量,其類型是一個抽象類,並讓它指向具體子類的一個實例。不能有抽象構造函數或抽象靜態方法。Abstract 類的子類爲它們父類中的所有抽象方法提供實現,否則它們也是抽象類 。取而代之,在子類中實現該方法。知道其行爲的其它類可以在類中實現這些方法。接口(interface)是抽象類的變體。在接口中,所有方法都是抽象的。多繼承性可通過實現這樣的接口而獲得。接口中的所有方法都是抽象的,沒有一個有程序體。接口只可以定義static final成員變量。接口的實現與子類相似,除了該實現類不能從接口定義中繼承行爲。當類實現特殊接口時,它定義(即將程序體給予)所有這種接口的方法。然後,它可以在實現了該接口的類的任何對像上調用接口的方法。由於有抽象類,它允許使用接口名作爲引用變量的類型。通常的動態聯編將生效。引用可以轉換到接口類型或從接口類型轉換,instanceof 運算符可以用來決定某對象的類是否實現了接口。

目的:對象以外的部分不能隨意的獲取對象內的內部數據。從而能夠使軟件的錯誤局部化,大大減少查錯和排錯的難度

類使得數據和對數據的操作集成在一起,從而對使用該類的其他人來說,可以不管它的實現方法,而只管用它的功能,從而實現所謂的信息隱藏。  封裝隱藏了類的內部實現機制,從而可以在不影響使用者的前提下改變類的內部結構,同時保護了數據。

發佈了57 篇原創文章 · 獲贊 33 · 訪問量 6萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章