面向?qū)ο蟾呒?06)-抽象類與接口、模板設(shè)計模式、代理設(shè)計模式_第1頁
面向?qū)ο蟾呒?06)-抽象類與接口、模板設(shè)計模式、代理設(shè)計模式_第2頁
面向?qū)ο蟾呒?06)-抽象類與接口、模板設(shè)計模式、代理設(shè)計模式_第3頁
面向?qū)ο蟾呒?06)-抽象類與接口、模板設(shè)計模式、代理設(shè)計模式_第4頁
面向?qū)ο蟾呒?06)-抽象類與接口、模板設(shè)計模式、代理設(shè)計模式_第5頁
已閱讀5頁,還剩7頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、18. 面向?qū)ο蟾呒墸?6) 本季要點:講解抽象類與接口的關(guān)系。本季講解了java中關(guān)于抽象類與接口的具體區(qū)別,同時講解了兩者的一些其他聯(lián)系。之后講解了模板設(shè)計模式、代理設(shè)計模式,最后又重點強調(diào)了抽象類和接口之間的關(guān)系blog: 零基礎(chǔ)學(xué)JAVAJava SE面向?qū)ο蟛糠?18.面向?qū)ο蟾呒墸?6) 2009-02-08上季內(nèi)容回顧:1、面向?qū)ο笾薪涌谂c抽象類的具體應(yīng)用。   可以通過對象的多態(tài)性,為父類實例化,之后一切的操作標準以父類為主。本季主要知識點:講解抽象類與接口的關(guān)系。1、一個抽象類中能否包含一個接口呢?abstract class A

2、60;               public abstract void fun();            interface B             

3、;                   public void print();                我們來驗證測試下哈發(fā)現(xiàn)生成A$B.class,表示B作為A的內(nèi)部接口,證明一個抽象類中可以包含一個內(nèi)部接口。那怎么使用

4、呢?我們看下面哈首先我們先子類X覆寫父類A方法但不覆寫接口B中的方法abstract class A                public abstract void fun();            interface B  &#

5、160;                             public void print();               &#

6、160;    class X extends A                /覆寫父類fun()方法            public void fun()     

7、60;                          System.out.println("Hello World!");                

8、發(fā)現(xiàn)編譯沒有問題哈現(xiàn)在我們測試覆寫接口方法哈abstract class A                public abstract void fun();            interface B    &#

9、160;                           public void print();                 &#

10、160;  class X extends A                /覆寫父類fun()方法            public void fun()       

11、60;                        B b = new Y();                    b.print()

12、;                        class Y implements B                    

13、            /覆寫父類接口中的方法print()                    public void print()          &

14、#160;                             System.out.println("Hello Java!");             

15、;                       現(xiàn)在我們加上主方法進行測試哈abstract class A                public abstract 

16、;void fun();            interface B                                pub

17、lic void print();                    class X extends A                /覆寫父類fun()方法  &

18、#160;         public void fun()                                B b = new Y(

19、);                    b.print();                        class Y implem

20、ents B                                /覆寫父類接口中的方法print()             &

21、#160;      public void print()                                      &#

22、160; System.out.println("Hello Java!");                                        public

23、 class Demo01                public static void main(String args)                     

24、0;          A a = new X();                    a.fun();              &#

25、160; 證明一個抽象類中可以包含一個接口,之后在抽象類的子類中可以有選擇的是否實現(xiàn)抽象類中的接口。2、一個接口中能否包含一個抽象類呢?同上,都是可以選擇是否實現(xiàn)interface A                public void fun();            ab

26、stract class B                                public abstract void print();      

27、0;         下面我們寫上個子類,檢驗一下是否可以有選擇實現(xiàn)抽象類Binterface A                public void fun();            abstr

28、act class B                                public abstract void print();       &

29、#160;            class X implements A                public void fun()           

30、;                  驗證可以哈下面覆寫抽象類B中print()方法interface A                public void fun();    

31、0;       abstract class B                                public abstract void pr

32、int();                    class X implements A                public void fun()  

33、0;                             new Y().print();                 &

34、#160;      class Y extends B                                public void print() 

35、                                       System.out.println("Hello World!");   

36、60;                                    public class Demo02        

37、0;       public static void main(String args)                                A a = ne

38、w X();                    a.fun();                 3、觀察以下的程序,驗證輸出結(jié)果abstract class A   

39、;             public A()                                this.print();&

40、#160;                       public abstract void print();        class B extends A     

41、60;          private int i = 30;            public B(int i)                  

42、60;             this.i = i;                        public void print()      

43、;                          System.out.println("i = "+i);                 &#

44、160;  public class Demo03                public static void main(String args)                  

45、              new B(50);                輸出結(jié)果為0哈,這與子類對象實例化過程有關(guān)哈回顧:子類對象的實例化過程   · 子類對象使用new關(guān)鍵字要調(diào)用構(gòu)造方法   ·  調(diào)用構(gòu)造方

46、法時的順序:先去調(diào)用父類中的構(gòu)造方法(默認為無參構(gòu)造),之后再調(diào)用子類中的構(gòu)造方法。   · 調(diào)用構(gòu)造方法的目的:為其內(nèi)部的屬性初始化   · 子類中的屬性在沒有完成父類中的構(gòu)造方法之前,所有的內(nèi)容都是默認值,整型是“0” 。思考:   我們知道一個子類如果實現(xiàn)了一個接口則肯定要覆寫接口中的全部抽象方法。那問?是否可以采用一種方式,讓子類可以有選擇的去覆寫自己真正需要的方法。interface Door        

47、0;       /開門            public void openDoor();            /關(guān)門            p

48、ublic void closeDoor();            /維修            public void repairDoor();            /拆除 

49、0;          public void removeDoor();            /鎖門            public void lockDoor();    

50、;    class D implements Door                /子類現(xiàn)在肯定要覆寫里面全部的抽象方法    矛盾點:   · 子類不需要覆寫全部的方法   · 如果子類直接實現(xiàn)了接口則肯定要覆寫全部的方法   ·

51、解決:如果中間加入了一個過渡端呢?    接口  -> 過渡端 -> 子類 |-  此過渡端不應(yīng)該被直接使用。 -> 抽象類過渡端使用抽象類實現(xiàn)最合適,因為抽象類可以實現(xiàn)一個接口同時可以有一些抽象方法,并且不能直接被new關(guān)鍵字實例化。interface Door                /開門    &

52、#160;       public void openDoor();            /關(guān)門            public void closeDoor();      

53、60;     /維修            public void repairDoor();            /拆除            public

54、0;void removeDoor();            /鎖門            public void lockDoor();        abstract class DoorAdapter imple

55、ments Door                /但是以下的方法雖然實現(xiàn)了,可是沒有具體的方法體            public void openDoor()          &

56、#160; public void closeDoor()            public void repairDoor()            public void removeDoor()       &#

57、160;    public void lockDoor()        class D extends DoorAdapter                /子類現(xiàn)在肯定要覆寫里面全部的抽象方法      

58、;      /只需要打開門            public void openDoor()                         &#

59、160;      System.out.println("開門");                    public class Demo04            

60、0;   public static void main(String args)                                new D().openDoor();  &

61、#160;              此處是有選擇的在子類實現(xiàn)了所需要的方法。這種設(shè)計稱為Adapter(適配器設(shè)計) 4、模擬:   · 張三 很老實  -> 李四,借10000000元,不還   · 張三  -> 討債公司  -> 李四  -> 還錢 張三和討債公司的目的 -> 還錢。/主題:討債

62、0;   interface Subject                /完成具體的操作            public void giveMe();        /真正

63、要討債的人    class RealSubject implements Subject                public void giveMe()               

64、0;                System.out.println("還我滴Money");                    /代理人    class Pr

65、oxySubject implements Subject                private Subject sub = null;            public ProxySubject(Subject sub)   &

66、#160;                            this.sub = sub;                  

67、0;     public void before()                                System.out.println("需要一些準備");                     

溫馨提示

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

最新文檔

評論

0/150

提交評論