轉載請註明原文地址:http://www.javashuo.com/article/p-nfloeglk-bw.htmlhtml
將類的某些信息隱藏在類內部,不容許外部程序直接訪問,而是經過該類提供的方法來實現對隱藏信息的操做和訪問,常見的實現方式就是:getter、setter。函數
封裝遵循了「開閉原則」,禁止外部直接訪問和修改類的信息。htm
一、類變量、成員變量和局部變量對象
類變量(靜態變量):用static修飾的變量稱爲靜態變量,其內容被該類的全部對象共享,全部對象中這個類變量的值都指向相同的一處內存,隨便一個對象修改了此處內存的值都會影響其餘對象。blog
成員變量:在類定義時聲明的變量,隨着對象的創建而創建,隨着對象的消失而消失,存在於對象所在的堆內存中。繼承
局部變量:在函數中聲明的變量,只定義在局部範圍內,只在所屬的區域有效。存在於棧內存中,做用的範圍結束,棧幀釋放,變量就消失。接口
二、成員變量以及方法做用域(可見性)——default、private、protected、public內存
咱們在定義成員變量和方法時,前面都會加上做用域修飾符(若是不加,默認爲default)。作用域
不一樣修飾符做用下,該成員變量或方法的做用域是不一樣的:get
三、構造函數與默認構造函數
構造函數是用來初始化對象的,一個類能夠重載多個構造函數。
須要注意的是:默認狀況下,一個類會有一個默認的構造函數,這個構造函數沒有內容也沒有返回值,通常都略去不寫。
可是,若是一個類定義了一個有參數有方法體的構造函數,這時編譯器就不會再給它默認加上一個無參且方法體爲空的構造函數,能夠理解爲無參的構造函數被覆蓋,此時須要手動定義一個無參構造函數。
在函數的繼承裏,子類必須使用super來實現對父類的非默認構造函數的調用.在建立對象時,先調用父類默認構造函數,而後調用子類自身本身定義的構造函數。
繼承是類與類的一種關係,子類擁有父類的全部屬性和方法(除了private修飾的屬性不能擁有)從而實現了實現代碼的複用。
繼承與實現的區別
1)概念不一樣
繼承:子類與父類的繼承。若是多個類的某個部分的功能相同,那麼能夠抽象出一個類出來,把他們的相同部分都放到父類裏,讓他們都繼承這個類。
實現:接口的實現。若是多個類都有一個行爲,可是處理的方法方式不一樣,那麼就定義一個接口,也就是一個標準,讓各個類分別實現這個接口,各自實現本身具體的處理方法。
2)關鍵詞不一樣
繼承:extends,實現:implements
3)數量不一樣
單繼承,多實現。
4)屬性不一樣
在接口中只能定義全局常量(static final),和空的方法體;而在繼承中能夠定義屬性方法,變量,常量等...
5)限制不一樣
某個接口被類實現時,在類中必定要實現接口中的抽象方法;而繼承則無需。
Java中的多態主要指引用多態和方法多態。
引用多態是指:父類引用能夠指向本類對象,也可指向子類對象。引用多態的強大主要體如今調用屬性、方法時,能夠根據引用具體指向的對象去調用,例如:子類中重寫了父類方法。
方法多態:子類中能夠重寫父類的方法,在調用方法時根據引用指向的子類對象決定調用哪一個具體的方法。方法多態的強大主要體如今能夠根據調用時參數的不一樣,而自主匹配調用的方法,例如:重載。
方法重寫與重載的區別:
重寫:通常發生在有繼承關係的子類中,子類中定義了一個方法,其 方法名、返回值類型、參數列表 與父類中某個方法同樣,此時就是子類中重寫(覆蓋)了父類的同名方法。
父類引用調用方法時,根據引用指向的對象決定調用父類定義的方法仍是子類定義的方法,這體現了多態。
重載:發生在同一個類中,存在 多個方法的方法名相同,可是參數列表不一樣。參數列表不一樣指的是參數個數、參數類型或者參數的順序不一樣。
調用方法時經過傳遞給它們的不一樣個數和類型的參數來決定具體使用哪一個方法,這也體現了多態。