您好,登錄后才能下訂單哦!
Java
Java是一個面向對象的語言。對程序員來說,這意味著要注意應中的數據和操縱數據的方法(method),而不是嚴格地用過程來思考。在一個面向對象的系統中,類(class)是數據和操作數據的方法的集合。數據和方法一起描述對象(object)的狀態和行為。
每一對象是其狀態和行為的封裝。類是按一定體系和層次安排的,使得子類可以從超類繼承行為。在這個類層次體系中有一個根類,它是具有一般行為的類。
繼承的概念:
將多個類中的共同代碼單獨提取出來,形成一個獨立的類, 多個類和當前獨立的類產生一種關系: 繼承關系 extends
繼承的好處:
1)提高了代碼的復用性
2)提高了代碼維護性
3)類和類產生這種關系,是多態的前提條件!
Java中繼承的特點:
1)在Java中,只支持單繼承,不支持多繼承,在別的語言可能有多繼承存在多繼承的語言:class 子類名 extends 父類名,父類名2{}
2)在Java中,雖然不支持多繼承,但是可以多層繼承! (分層初始化:先讓父類初始化再是子類初始化)
3)在Java中,所有的Java類(自己定義的,Jdk提供的)都繼承自 Object類 (超類)
繼承中的注意事項:
1)子類繼承父類,只能繼承父類非私有的成員(成員變量,成員方法),但是可以通過公共方法間接的訪問!
2)子類不能繼承父類的構造方法,但是可以通過關鍵字 間接訪問父類的構造方法(等會講super)
3)不要為了部分使用功能去使用"繼承"
繼承中成員的組成
成員變量
構造方法
成員方法
成員變量
1)子類繼承父類,子類中的成員變量名稱和父類中的成員變量不一致的情況:比較簡單,分別輸出!
2)子類繼承父類,子類中的成員變量名稱和父類中的成員名稱一致的情況:(重點)
a)先在子類的局部位置中找,如果存在,就使用
b)如果在類的局部位置沒有,那么在子類的成員位置找,如果存在,就使用
c)如果子類的成員位置沒有,那么在父類的成員位置找,如果存在,就使用
d)如果父類的成員位置都沒有,那么就報錯!
繼承中構造方法初始化的特點(分層初始化!)
繼承中,子類不能繼承父類的構造方法,但是可以通過super訪問父類的構造方法
子類的構造方法中(無參/有參),都會默認訪問父類的無參構造方法,
由于子類繼承父類,子類可能會用到父類中數據,所以先讓父類進行初始化,再讓子類初始化!(分層初始化!)
關于super():訪問無參構造方法,必須寫在子類構造方法中第一句話
什么是多態:
一個事物在不同時刻的不同狀態
舉例:
Animal a = new Cat() ; //貓是動物
Cat c = new Cat() ; //貓是貓
多態內存圖:
多態的前提條件:
1)必須有繼承關系 (產生一個中extends 關系)
2)需要有方法重寫子類繼承父類的時候,需要使用子類的功能,需要將父類的功能覆蓋掉! 舉例:貓狗案例
Animal, eat()和sleep(),每個動物的吃和睡的行為不同!
3)必須有父類引用指向子類對象 (向上轉型)
Fu f = new Zi() ; 在內存中使用子類實例化(創建對象),但是子類繼承父類,通過構造方法 讓父類初始化
多態的好處:
1)提高代碼的維護性(繼承來保證)
2)提高代碼的擴展性(由多態保證)
多態的成員訪問特點:
Fu f = new Zi() ;
1)成員變量(非靜態變量) 編譯看左,運行看左邊 (看父類)
2)構造方法
Fu f = new Zi() ; 內存創建的是子類對象,但是存在繼承關系,執行構造方法先讓父類初始化完畢,然后在初始化子類
3)成員方法(非靜態) (方法重寫,說的非靜態的方法!) 編譯看左,運行看右 (因為存在方法重寫,運行看的右邊)
4)靜態的成員方法: 編譯看左,運行看左(靜態方法算不上方法重寫,跟類先關,優先父類進行數據初始化,function方法先進內存)
父類引用.靜態方法名()--調用父類的方法
多態的弊端:
父類引用指向子類對象(向上轉型),無法訪問
1)直接在測試的時候,子類去創建自己的對象 Son s = new Son()
可以訪問,但是從內存角度考慮,重新在堆內存中開辟空間,耗費空間的內存!Zi zi = (Zi)f;子類的特有功能!
需要訪問子類特有功能,怎么辦?
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。