Java面向對象總結
下面是學習面向對象的知識點和總結:
面向對象思想:
遇到需求,首先去找是否有現成的類來實現此功能,創建對象來調用,以此來組合成新的類實現自己的需求。
在java中是以類為單位,一個類包括成員變數、成員方法和構造方法
構造方法:創建對象的時候,由jvm自動調用,其中的作用是給成員變數賦值;不能用static關鍵字來修飾構造方法。
構造方法中也有return語句,只是一般不寫;java中所有的方法中都有return語句,來進行出棧。
匿名對象:
使用匿名對象的使用場景:就是這個對象只用一次,這樣的場景非常方便。
封裝:
封裝的目的就是隱藏;
為了數據安全,或者隱藏方法的內部實現過程,對外提供特有的方法進行訪問;
下面就是把成員變數隱藏起來,通過設置get,set來對數據進行設置和讀取:
繼承:
繼承:子類繼承父類的非私有的成員(成員變數和成員方法),注意:構造方法是不能被繼承的。
類的繼承只能是單一繼承:也就是說一個子類只可以同時繼承一個父類;
介面可以進行多重繼承:一個介面可以同時繼承多個介面
類可以進行多重繼承:也就是說父類可以再繼承其他的類
使用繼承的時候:子類是父類的一種特殊情況的時候才使用繼承;比如蘋果是水果的其中一種,所有可以使用蘋果類來繼承水果類;
子類中有與父類同名的成員變數和方法時,可以使用super來調用父類的成員
super只能調用直接父類的成員,不能調用父類的父類的成員
方法的重寫:
使用的場景:父類的方法不能滿足子類的需求的時候,需要進行方法重寫
子類和父類的方法一樣時,當執行的時候,調用的是子類的方法,這就叫做重寫
只有一般的方法才能重寫,構造方法是不能被重寫的
重寫的格式:
1、方法名和參數列表必須相同
2、返回值一般要求相同,或者子類的返回值類型是父類方法返回值類型的子類
3、父類的方法有static修飾的時候,子類方法也必須用static修飾
4、子類方法 的許可權不能比父類方法的許可權低
子類實例化的過程:
JVM執行時,一旦遇到new關鍵字,就會到堆內存中開闢空間,得到這個空間的內存地址;
接下來根據類的成員,在堆中為類中成員變數分配空間,賦默認值;如果這個類有父類,則還要分配一塊空間,用於保存父類中的成員變數;
再然後,就會調用相應的構造函數進棧執行;(也就是說,如果創建的是子類對象,此時調用的是子類的構造函數進棧);
構造函數進棧後,首先會執行一個隱式三步:
1、調用父類構造函數;(手動寫,就是super(參數列表))默認調用的都是父類無參構造函數;
2、為對象中的成員變數顯示初始化;
3、如果有構造代碼塊,執行構造代碼塊;
隱式三步都執行完畢,才開始執行構造函數中的代碼;
當構造函數中的代碼執行完畢後結束出棧,對象才算創建完成;
注意事項:
1、子類實例化,只會創建一個對象(就是子類對象),但是也會為父類成員變數分配空間;
2、子類構造函數執行時,會先執行父類構造函數,目的是給父類成員變數賦值;執行完父類構造函數才執行子類構造函數;
因為只是創建了一個子類的對象,所以如果調用的方法存在重寫的情況下,就一定調用的是子類重寫過的方法
創建子類的時候,調用父類的構造方法的原因是為了給父類的成員變數進行顯示初始化
this和super關鍵字:
this代表當前調用的對象,所有的非靜態成員方法和變數調用都需要依賴對象
this的作用:
1、區分局部變數和成員變數
2、在構造器方法中調用其他構造方法
在構造方法中調用其他構造方法時,必須把this(參數)放在第一行
super代表直接父類
當子類中的成員與父類同名時,可以用super來調用父類的成員
在子類的構造方法中可以使用super(參數)來調用父類的構造方法;如果不寫默認會調用父類的無參數構造方法。
this和super調用構造方法時,不能同時存在,因為兩個都必須放在第一行;當使用this來調用其他的構造方法時,是利用了間接的調用父類的構造方法
final關鍵字:
inal修飾類:該類不能被繼承
final修飾方法:該方法不能被重寫
final修飾變數:基本數據類型,成為了常量,不能被改變
引用數據類型,對應指向對象的地址不能改變
final不能修飾構造方法
抽象類:
抽象類:抽象類不能創建對象,也就是說不能new,必須由子類來繼承
一個類繼承抽象類繼承抽象類,必須全部重寫抽象方法,否則該類還是抽象類
一個類中存在抽象方法,就這個類必須聲明成抽象類
抽象類可以存在所有的成員(常用變數,成員方法,構造方法)
使用場景:
1、類中有抽象方法
2、不希望被創建對象
多態:
多態就是:父類的引用指向子類的對象;或者是介面的引用指向實現類的對象
多態的使用前提:兩個類存在繼承關係,或者介面和介面實現類的關係
好處:提高了程序的擴展性,代碼的復用性
多態編譯時,全部看父類
多態運行時,除了存在重寫的非靜態方法,運行子類重寫的方法,其他全部運行父類的成員。
類型轉換:
向上自動轉型:多態就屬於自動向上轉型
強制向下轉型:可以先使用instanceof判斷然後再進行強制轉換,否則容易出現類型轉換異常
介面:
介面中只有成員變數和成員方法
成員變數默認的是:public static final
成員方法默認的是: public abstract
這些修飾符可以寫也可以不寫,在編譯的時候會自動加上
一個介面可以同時繼承多個
一個類可以同時實現多個介面
類繼承和實現可以同時進行,但是實現介面應該放在最後
注意:
不管是一個類實現多個介面,還是介面繼承多個介面時,不能出現方法名和參數名相同,返回值類型不同的方法
介面和抽象類的使用場景:
抽象類:兩個類存在繼承關係
介面:兩個事物不存在繼承關係,主要用來定義規則,增加功能
static關鍵字:
類載入的過程:
包package:
許可權修飾符:
內部類:
學習Java的同學注意了!!!
學習過程中遇到什麼問題或者想獲取學習資源的話,歡迎加入Java學習交流群495273252,我們一起學Java!
※Java中String通過引用傳遞問題詳細解析
※深入學習Java同步器AQS
※雜談:關於程序員職業發展的兩三事
TAG:Java團長 |