java面向對象

面向對象
類 對現實中事物的描述,將一類事物的靜態屬性和動態屬性組合在一起
對象 事物存在的實體 類的具體實現個體是對象,對象是具體實在的事物
封裝
封裝時面向對象變成的核心思想,將對象的屬性和行爲(方法)封裝,類作爲封裝對象屬性和行爲的載體向用戶隱藏內部的實現細節。將同一類事物的共性歸到同一類當中。利用抽象數據類型將數據和對數據的操作封裝起來;數據要儘可能的隱藏在抽象數據內部,只保留一些接口用來和外部進行交流;用戶無需知道內部的數據方法的具體實現細節,只需操作外部暴露的接口。
繼承
繼承是從已有的類中派生出新的類,新的類有父類的數據屬性和行爲,並能擴展新的行爲和屬性;使類之間產生了聯繫;java繼承關係是傳遞的;java只支持單繼承,不支持多繼承;java以另一種型是實現多繼承(實現多個接口)
Object是所有類的父類
子類和父類中變量同名,在子類中訪問子類中的變量this.,在子類中訪問父類中的變量super.
子類和父類中函數同名,子類函數會覆蓋父類函數,Override,重寫父類功能內容;子類要重寫父類方法必須保證子類權限大於父類(public>protected>默認權限>private),靜態方法只能覆蓋靜態方法;子類不能重寫父類的構造方法,父類比子類先加載,在子類所有構造方法之前都默認會調用父類的無參構造器(super());父類中如果有無參構造器,子類中構造函數可以不用寫super(),父類中如果沒有無參構造器,則子類中每個構造函數都要在第一句顯式的調用父類的有參構造器super(參數)。(如果沒有構造器,系統會默認生成一個無參構造器;如果有構造器,系統不會生成無參構造器)
多態
多態分爲兩種,編譯時多態和運行時多態,編譯時多態是靜止的,指的是方法的重載,它是根據參數列表的不同來區分不同的函數;運行時多態是動態的,程序中定義的引用變量指向的具體類型和通過該引用變來嗯發出的方法調用在編程時不確定,而是在程序運行期間才能確定。
向上轉型
Cat類繼承於Animal類 Animal a=new Cat();//父類引用指向子類對象
這樣可以使用子類的功能,也可以使用父類中的方法和屬性;子類如果重寫了父類某個方法,則父類引用不能調用父類被重寫的方法,只能調用子類重寫父類的方法。
通過父類的引用只能訪問子類對象從父類繼承過來的成員,不能訪問子類對象所特有的成員;父類引用永遠不可能直接賦給子類引用,只有在父類引用本身指向的就是子類對象的時候,纔可以將父類引用強制轉化爲子類的引用(其他情況下不能將父類的引用強制轉化爲子類的引用,否則運行時會出錯)
成員變量和局部變量
成員變量(類的屬性) 定義在類中,作用於整個類中;存在於堆內存對象中;隨着對象創建而創建,消失而消失;有默認的初始化值;
局部變量 定義在函數語句,局部代碼快中;只對所屬區域有效;存在於棧內存中隨着所屬區域的執行而存在,結束而釋放;無默認初始化值,因此必須初始化,否則不能運行;
當成員變量和局部變量名稱一致時,默認使用局部變量
構造函數
函數名與類名一致,不能用return;構造函數不能互相調用,會形成死循環;對象一建立就會調用構造函數,可以用於對特定對象進行初始化;如果類中沒有構造函數,系統會默認添加一個空參構造器;構造函數可以私有化,私有化之後不能創建對象;
構造代碼塊
給所有對象的共性進行初始化,對象一建立就運行,優先於構造函數,可多次運行;{}
this
代表當前調用對象;區分同名成員,局部變量((成員)this.變量名(局部)變量名);當本類內部需要使用本類對象時,用this來表示;也可以用來構造函數調用其他構造函數,寫在構造函數第一行;
static
靜態關鍵字,修飾成員(包括變量和方法),表示共性數據;可以直接被類名調用(類名.靜態成員);被所有對象共享,只佔用一塊內存(方法區,共享區,數據區);隨着類的加載而加載,隨着類的消失而消失,生命週期最長;靜態成員和成員變量:靜態成員隨着類的加載存在於方法區中,成員變量隨着對象的建立存在於堆內存中,靜態成員隨着類的消失而消失,成員變量隨着對象的消失而消失;靜態方法只能訪問靜態成員,靜態方法中不能呢個定義this,super關鍵字(靜態成員比對象的生命週期長);靜態方法不能調用成員變量(生命週期不同);
靜態代碼塊
隨着類的加載而執行,只執行一次,優先於主函數,用於給類初始化(代碼執行順序:靜態代碼塊,主函數,構造代碼塊,構造函數)
一個對象的建立過程:
局部代碼塊
在方法中,限定局部變量的生命週期
Person p= new Person();
1.找到Person.class文件並加載到內存中,並且會加載Person的父類(如果有直接父類)
2.執行static代碼塊
3.在堆內存中開闢空間,分配內存地址(main函數開始)
4.在堆內存中建立對象的特有屬性,並進行默認初始化
5.對對象進行構造代碼塊初始化
6.對對象進行對應的構造函數初始化(在構造函數中第一行會先調用父類構造函數進行初始化,父類初始化完畢後,再對子類進行顯示初始化)
7.將內存地址賦值給棧內存中的p變量
final
繼承的弊端,打破了封裝性;final修飾的類不能被繼承,final修飾的方法不能被覆蓋,final修飾的變量是一個常量,只能賦值一次
抽象類和抽象方法
抽象方法必須在抽象類中,不能用該類創建對象,沒有意義,因爲抽象方法沒有方法體,只有方法聲明,要使用抽象方法,要有子類重寫該方法;抽象類的子類如果沒有重寫所有的抽象方法,則子類也是一個抽象類(只要有抽象方法,就是抽象類)
接口
interface,不能創建對象;所有變量都是 public static final,所有的方法都是 public abstract;接口可以被類多實現,類在繼承一個父類的同時可以實現多個接口,接口之間可以繼承,一個接口可以繼承多個接口;
接口於抽象類的區別
接口可以近似的當作一個抽象類,但是卻不是抽象類,接口被類實現,抽象類被類繼承;接口中方法不能有方法體,抽象類中方法可以有方法體;
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章