day08(繼承單列設(shè)計)總結(jié)_第1頁
day08(繼承單列設(shè)計)總結(jié)_第2頁
day08(繼承單列設(shè)計)總結(jié)_第3頁
day08(繼承單列設(shè)計)總結(jié)_第4頁
day08(繼承單列設(shè)計)總結(jié)_第5頁
已閱讀5頁,還剩3頁未讀 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

1、Day08總結(jié)上午:1、 靜態(tài)代碼塊:格式:Static靜態(tài)代碼塊中的執(zhí)行語句。特點:隨著類的加載而加載而且只執(zhí)行一次,類一加載靜態(tài)代碼塊就執(zhí)行。作用:用于給類進行初始化的,注意區(qū)別構(gòu)造代碼塊:給對象都進行初始化。代碼實現(xiàn):Eg:Class StaticCodeStatic/開始執(zhí)行靜態(tài)代碼塊System.out.println(a);Public static void show()Sop(show run);Class StaticCodeDemoStatic/靜態(tài)代碼塊,對類進行初始化最開始執(zhí)行。Sop(b);Public static void main(String args)/ne

2、w StaticCode();/調(diào)用staticCodel類StaticCode s=null;Static/第二步執(zhí)行。Sop(c);2、 單列設(shè)計模式:a) 什么是設(shè)計模式:解決某一類問題最行之有效的方法。b) 單列設(shè)計模式:解決一個類在內(nèi)存中只存在一個對象。i. 為了避免其他程序過多的建立該類對象。先控制禁止其他程序建立該類對象ii. 還為了讓其他程序可以訪問到該類對象只好在本類中自定義一個對象。iii. 為了方便其他程序?qū)ψ远x對象的訪問可以對外提供一些訪問方法。怎么代碼體現(xiàn):1、 將構(gòu)造函數(shù)私有化。2、 在類中創(chuàng)建一個本類對象。3、 提供一個方法可以獲取到該類對象。代碼體現(xiàn):Eg:C

3、lass Single 惡漢式:定義單列時,建議使用惡漢式。Private int num;Public void setNum()Public int getNum()Private static Single s=new Single();/這里要加static因為下面方法中訪問到了s.靜態(tài)只能訪問static的。/為什么要私有?對成員數(shù)據(jù)可控?因為方法很有可能有參數(shù),所以不用把S暴露出去,加private;Public static Single getIntnstance()Return s;Class SingleDemoPublic static void main(String

4、args)Single s1=Single.getInstance();Single s2=Single.getInstance();S1.getNum(23);Sop(s2.getNum();/結(jié)果為23Single s2=new Single();Single s1=new Single();S1.getNum(30);Sop(s2.getNum();/0Student s1=Student.getStudent();Student s2=Student.getStudent();S1.setAge(40);S2.setAge(50);Class StudentPrivate int ag

5、e;Private static Student s=new student();Private Student()Public static Student getStudent()Return s;Public void setAge(int age)This.age=age;Public int getAge()return age;內(nèi)存分析:首先類進入內(nèi)存,將類中的方法加載進方法區(qū)中,此時Person類中還定義了一個Person類型的p并默認初始化為null;此時在堆內(nèi)存中創(chuàng)建一個對象new Person 并對其age屬性進行默認初始化值為0;并分配其內(nèi)存地址值為0x0045,并將此地

6、址值賦值給棧內(nèi)存中的p1=0x0045,此時p1通過該地址值指向堆內(nèi)存中的age.此時Person()加載進入棧內(nèi)存,它里面有this 和age,this指向的當前調(diào)用該方法的對象p1.此時p1將指向堆內(nèi)存中的地址值賦值給this.Person類方法通過該地址值指向堆內(nèi)存中的實體。然后將5賦值給堆內(nèi)存中的實體。此時堆內(nèi)存中的age=5;然后Person方法彈棧。調(diào)用Person類的getInstance()方法加載進入棧內(nèi)存,然后加地址值返回方法區(qū)中的p。此時方法區(qū)中的Person指向堆內(nèi)存中的實體。然后彈棧。此時Person p1=new PersonInstance();執(zhí)行完畢,第二條語

7、句同理。當執(zhí)行完之后,p2=0x0045指向堆內(nèi)存中的同一實體。P1調(diào)用Person類中的setAge的方法,對堆內(nèi)存中的實體進行賦值。此時age=40;s2調(diào)用Personl類中的setage方法,對堆內(nèi)存中的實體進行賦值。此時age=50.最后實體中的age的值為50;單列設(shè)計的另外一種方式:單列延遲加載方式:只有對象被調(diào)用的時候才會被加載,才被初始化,稱之為懶漢式。代碼實現(xiàn):rEg:Class SinglePrivate Single()Private static Singel s=null;Public static Single getIntance()If(s=null)S=ne

8、w Single();Return s;因為多線程技術(shù)的存在,并發(fā)訪問會造成懶漢式不安全。3、 繼承:a) 概述:多個類中存在相同屬性和行為時,將這些內(nèi)容抽取到單獨一個類中,那么多個類無序再去定義這些屬性和行為,只要繼承那個類即可。b) 那多個類成為子類,單獨這個類成為父類或者基類超類,c) 子類可以直接訪問父類重的非私有的屬性和行為。d) 通過extends關(guān)鍵字讓類與類之間產(chǎn)生繼承關(guān)系。特點:1、 繼承的而出現(xiàn)提高了代碼的復用性。2、 繼承的出現(xiàn)讓類與類之間產(chǎn)生了關(guān)系,提供了多態(tài)的前提。3、 Java支持單繼承,對于多繼承,java保留了這種機制并進行了改良,避免了多繼承調(diào)用時的不確定性。

9、它這個是發(fā)送端,首先 要關(guān)聯(lián)你要發(fā)送的源文件,可以單獨在對于使用一個繼承體系。1、 查閱頂層類中的共性內(nèi)容了解該體系的基本功能。2、 創(chuàng)建該體系的最子類對象。簡單一句話:可以多個子類繼承一個父類,但是不一個 類繼承多個父類,在java中是不允許的。什么時候使用繼承?當事物之間存在著所屬關(guān)系時,就可以使用繼承,所屬:xxx是yyy的一種,即x繼承y如果A真繼承了B,B中的鎖有的功能是不是A都具備了。繼承子父類中的成員變化。 1、 成員變量:a) 當子父類中出現(xiàn)同名的成員變量時,可以使用super關(guān)鍵字來區(qū)分,父類的成員變量。b) Super和this用法很相似,this代表的是本類的對象,sup

10、er代表父類的所屬的空間,c) 先有父類在有子類。面試中會出現(xiàn),開發(fā)中幾乎沒有,因為父類的成員都是從下到上抽取的,子類中還保留相同的變量干嘛?2、成員函數(shù) 當子父類出現(xiàn)一模一樣(返回值、函數(shù)名、參數(shù)列表全部相同)的函數(shù)時,就會出現(xiàn)調(diào)用時運行子類的方法的情況。 這種情況,形象成為覆蓋或者重寫或者覆寫。 什么時候用覆蓋? 當對一個類中的功能的內(nèi)容進行重新定義時,可以定義該類的子類,并保留父類中的功能聲明,重新定義功能內(nèi)容,并建立子類對象調(diào)用該功能。 實現(xiàn)代碼:/*當子父類中出現(xiàn)一模一樣的函數(shù)時,就會出現(xiàn)調(diào)用時運行子類的方法的情況。這種情況,形象的稱為 覆蓋或者重寫或者叫做覆寫 override。什

11、么時候用覆蓋?當對一個類中的功能的內(nèi)容進行重新定義的時,可以定義該類的子類,并保留父類中的功能聲明,重新定義功能內(nèi)容。并建立子類對象調(diào)用該功能。覆蓋小細節(jié):1,子類方法覆蓋父類方法時,權(quán)限必須大于等于父類的權(quán)限。2,靜態(tài)只能覆蓋靜態(tài),或者被靜態(tài)覆蓋。 */class Fupublic static void show()System.out.println(fu show);class Zi extends Fupublic static void show()System.out.println(zi show);class ExtendsDemo3 public static void m

12、ain(String args) /Zi z = new Zi();/z.show();/Phone p = new Phone();NewPhone p = new NewPhone();p.show();/描述手機。來單顯示 顯示 號碼。class Phonevoid show()System.out.println(fu number);/*為了對Phone類中的來電顯示功能進行改變。定義了一個子類,保留了父類中功能的聲明,但是重新定義了功能的內(nèi)容。這就是覆蓋的應用。*/class NewPhone extends Phonevoid show()super.show();System.

13、out.println(name);System.out.println(pic);3、構(gòu)造函數(shù) 特點: 在運行時,發(fā)現(xiàn)父類構(gòu)造方法先運行了,然后才是子類構(gòu)造函數(shù)。 原因:是因為子類的所有的構(gòu)造函數(shù)中都有一句默認的隱式語句:super();會默認調(diào)用父類重空參數(shù)的構(gòu)造函數(shù)。 為什么有super默認語句呢? 因為子類對象在初始化時,必須要到父類先去初始化。 為什么要到父類中去初始化呢? 因為子類繼承了父類,可以獲取父類中的數(shù)據(jù),所以在使用父類數(shù)據(jù)之前必須要明確父類是如何對自己的成員進行初始化的。這也是子類一定要訪問父類構(gòu)造函數(shù)的原因。所以父類的構(gòu)造函數(shù)有兩個作用:1、給本類初始化如果父類中的沒有

14、空參數(shù)的構(gòu)造函數(shù), 那么此時在手動就必須通過super語句或this語句指定要訪問父類的構(gòu)造函數(shù)。 注意:super關(guān)鍵字必須定義第一行。任何構(gòu)造函數(shù)中的默認第一句都是super. 面試題:為什么super和this不能再構(gòu)造函數(shù)中同時出現(xiàn)? 為什么super語句必須放在第一行? 因為只有父類初始化完之后才初始化子類。 Object是java中所有類的父類。 以上就是一個子類的實例化過程。實現(xiàn)代碼:class Fu extends Object /int num ;Fu()/super();System.out.println(fu.);Fu(int x)/num = 10;System.out.println

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論