1. 程式人生 > >面向對象封裝與繼承

面向對象封裝與繼承

返回 ont ner 存儲空間 括號 cte 根據 pro 寫上

面向對象: (1)面向過程 強調過程,執行者:它是一種更符合人們思考習慣的思想; (2)面向對象 強調對象,指揮者:它使復雜的內容簡單化; (3)面向對象思想的特點:它使我們從執行者變成了指揮; 面向對象方法的主要優點是:符合人們通常的思維方式;從分析到設計再到編碼采用一致的模型表示,具有高度連續性;軟件重用性好。 技術分享圖片 面向對象的寫法: 技術分享圖片 初始化對象 技術分享圖片 面向對象的特點: 封裝;繼承;多態 封裝,有參構造方法。 技術分享圖片 技術分享圖片 無參構造方法 技術分享圖片 技術分享圖片 類和對象: 對於同一類事物可以抽取它們的共性的內容,定義在類中。如生活中的汽車,每一臺車都有輪胎數和顏色。那麽在通過java描述汽車這類事物時,就可以將這兩個共性屬性作為類中的屬性進行定義。通過該類建立的每一個汽車實體都具有該屬性,並可以有對象特有的屬性值。
(1)類對現實世界中事物的描述(成員變量和方法); (2)對象 現實世界中實際存在具體的個體; (3)對象的使用以及內存圖。 成員變量與局部變量的區別: 1.作用域: 成員變量的作用域是整個類中都可以訪問; 局部變量是的作用域是定義它的方法內,方法彈棧,它就消失; 2.初始值: 局部變量使用前必須手動賦值;系統不會賦默認值; 成員變量系統會賦初始值,Sting-->null,int--0,double--0.0,boolean-->false,char-->‘\u0000‘; 3.所在內存區域:
局部變量在方法運行的棧幀裏,在棧裏,會自動釋放; 成員變量在對象裏,對象在堆裏,成員變量也在堆裏,不使用的對象會被垃圾回收機制在不確定的時候回收。 局部變量和成員變量: (1)作用範圍 局部變量:方法內public void method(String name) {}; 成員變量:類中,對整個類有效{成員變量分為兩種一種靜態的,一種非靜態的}; (2)存儲空間 局部變量:棧內存 成員變量:堆內存{靜態的成員變量在方法區,非靜態的在對象中在堆內存中} (3)初始化值 局部變量:在使用前必須手動給值
成員變量:jvm默認初始化值。 技術分享圖片 成員變量 技術分享圖片 封裝: (1)封裝的好處:便於重復使用,安全性高。 (2)private(私有的)權限修飾符 封裝的訪問修飾符: 1、private(私有的)--》訪問我,除了當前類中可以訪問的到,其他類必須通過方法。 2、protected(受保護的) 3、public(公共的) 4、默認的,也就是沒有訪問修飾符。
位置 private 默認的 protected public
同一個類
同一個包內的類
不同包內的子類
不同包並且不是子類
private(私有): private修飾成員變量和成員方法後,它們都不能在其他類直接訪問,成員變量要通過公開的setget方法訪問,成員方法私有表示這個方法是給本類自己方法用的。 註意:私有僅僅是封裝的一種體現形式而已。封裝不僅僅只有private一種方式,比如protected也可以實現封裝。 技術分享圖片 技術分享圖片 構造函數: (1)用途:用於給對象中屬性進行初始化。 A:格式類名(){code}Person(){} B:Person(){}public Person(){} (2)特點 你不定義空參數的構造函數,系統會自動給一個空參構造,你定義了構造函數無論是有參還空參的,系統就不再給空參數的了。 (3)重載構造函數,是根據參數列表來區分是哪個構造函數。 註意:構造函數細節:如果在定義類時沒有定義構造方法,則編譯系統會自動插入一個無參數的默認構造器,這個構造器不執行任何代碼。如果我們手動定義了一個構造函數,系統就不會再給默認構造函數。所以建議大家;在給類添加帶參數的構造函數的同時,將無參的也加上。 具體什麽時候使用構造函數: 1、當我自定義對象,需要使用不定變量,或者用戶輸入的數據,我這個時候需要從當前類中傳遞給我自定義對象的時候,需要使用到有參構造函數進行傳遞。 2、當我什麽時候用空參構造函數:當我需要使用自定義對象去幫我操作一些工作,刷新當前頁面所有數據。 或者我現在要初始化一些插件或者動畫,或者其他的操作。 技術分享圖片 this關鍵字: 每個對象都有一個指向自己的指針,就this。 this的作用: 1.在方法中區分成員變量和局部變量.this.成員變量; 2.this語句可以在構造函數裏調用其他構造函數; 3.在一個方法中,this可以調用本類的其他方法,當然也可以省略: (1)代表當前對象的引用。使用的時候,誰調用方法,this就代表誰。 (2)什麽時候使用this呢? A:當局部變量和成員變量重名的時候,可以用this進行區分。 B:this調用成員方法 C:構造函數中使用this 註意:this() 必須放在第一行。 技術分享圖片 創建對象在內存中的詳細步驟: 1.主函數進棧,給類類型變量c分配空間 2.在堆內存中開辟空間,分配內存地址 3.在堆內存中建立對象特有屬性,並進行默認初始化 4.對屬性進行顯示初始化 5.將內存地址賦給棧內存中的c變量 總結: 初始化塊就是構造器的補充,其實就是提煉各個構造函數中通用的初始化行為,將它們放到初始化塊中,這樣,可以只寫一次,不用每個構函都寫一遍,它會自動保證在構函之前執行。初始化塊和構函相關聯構函執行一次,初始化塊也執行一次。 對象內中的方法: 1、構造方法:隨著類加載而執行,只執行一次,就是類初始化時隨著執行。 2、自定義方法:自定義方法,如果創建後,沒有對象調用則不執行,必須通過對象調用才能進行執行操作。 3、當前類中方法,你可以直接使用方法名進行執行,因為在當前對象中,沒有其他對象能夠引用,只需要寫上方法名在主入口方法中即可。 4、靜態代碼,通過關鍵字static加上大括號進行創建。優先級最高,不受代碼執行的步驟所影響。 總結:靜態方法(優先級最高) > 構造方法 > 自定義方法; 繼承:(extends ) 多個類中存在相同屬性和行為時,將這些內容抽取到單獨一個類中,那麽多個類無需再定義這些屬性和行為,只要繼承那個類即可。多個類可以稱為子類,單獨這個類稱為父類或者超類基類。子類可以直接訪問父類中的非私有的屬性和行為。通過 extends 關鍵字讓類與類之間產生繼承關系。格式:class 貓 extends 動物{} 註意: 1、一個父類可以有多個子類。 2、一個子類不能有多個父類。 3、object(任何類都起源於他):他是所有類的默認父親,如果當前類沒有繼承,那麽系統自動默認繼承object 4、後期再學習使用過程,看見範圍值結果為object或者obj類型,那麽就是返回為對象的意思。 父類 技術分享圖片 子類 技術分享圖片 運行測試類: 技術分享圖片 今天作業: 1、大象與冰箱的故事。 2、完善今天動物類的創建與方法的使用: 1、通過Scanner,進行選擇與動物玩耍、吃飯、睡覺、看病。 2、每次創建對象,需要顯示對象的:疲勞度、饑餓度、健康值; 3、通過選擇給動物吃飯,睡覺到一定值後,動物無法進行吃飯與睡覺,必須先消耗,再操作,並提醒用戶。 4、必須循環操作。

面向對象封裝與繼承