繼承和接口和java訪問權(quán)限修飾符總結(jié)_第1頁
繼承和接口和java訪問權(quán)限修飾符總結(jié)_第2頁
繼承和接口和java訪問權(quán)限修飾符總結(jié)_第3頁
繼承和接口和java訪問權(quán)限修飾符總結(jié)_第4頁
繼承和接口和java訪問權(quán)限修飾符總結(jié)_第5頁
已閱讀5頁,還剩4頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、 第三章,第四章內(nèi)容總結(jié) -Mr yang 多態(tài)性: 發(fā)送消息給某個(gè)對象,讓該對象自行決定響應(yīng)何種行為。 通過將子類對象引用賦值給超類對象引用變量來實(shí)現(xiàn)動(dòng)態(tài)方法調(diào)用。動(dòng)態(tài)綁定: 一、使用父類類型的引用指向子類的對象; 二、該引用只能調(diào)用父類中定義的方法和變量; 三、如果子類中重寫了父類中的一個(gè)方法,那么在調(diào)用這個(gè)方法的時(shí)候,將會(huì)調(diào)用子類中的這個(gè)方法;(動(dòng)態(tài)連接、動(dòng)態(tài)調(diào)用) 四、變量沒有被重寫(覆蓋)的概念,”重寫“的概念只針對方法, 1.方法重載: 在同一個(gè)類中定義了兩個(gè)以上的同名的方法, 但是它們擁有不同的參數(shù)列表。 1.1重載的條件:參數(shù)不同a.個(gè)數(shù)不相同b.類型不同*c.順序不同注意:與

2、方法的返回類型無關(guān),和訪問修飾符無關(guān) 2.方法重寫:在子類中定義了一個(gè)和父類中相同的方法,父類的方法在子類中就被覆蓋了(隱藏了). 3.動(dòng)態(tài)綁定:父類的引用指向子類的對象,如果調(diào)用的方法在子類中被重寫,則調(diào)用子類重寫了的方法。如果調(diào)用的方法在父類中沒有定義,則報(bào)錯(cuò)。訪問修飾符:1.tected3.private4.默認(rèn)的方法修飾符:1.static:靜態(tài)方法中不能訪問非靜態(tài)的變量和方法,也不能使用this和super關(guān)鍵字 static 關(guān)鍵字修飾的代碼不依賴具體的對象實(shí)例. 總是比普通的代碼塊先加載2.final:能修飾類,方法,屬性。 2.1:final修飾類時(shí):該類

3、不能被繼承. 2.2:final修飾方法時(shí):該方法不能被重寫. 2.3:final修飾類的成員屬性時(shí):聲明時(shí)就要賦值,或者在構(gòu)造方法中給它賦值. final修飾類的屬性時(shí):必須在聲明時(shí)賦值final修飾局部變量:如果在聲明時(shí)沒有賦值,則在后面的代碼中可以有一次給它賦值的機(jī)會(huì),一旦賦值則該變量的值不可更改。 final修飾的變量是引用類型時(shí)指引用不能更改,引用指向的對象的屬性值是可以更改的. Final 表示最終的3.abstract:修飾類,方法. 抽象方法使用abstract修飾符修飾 抽象方法只能在抽象類中聲明。 即:如果一個(gè)類中存在一個(gè)或以上的抽象方法,則該類也要聲明為抽象類。 3.1:

4、抽象類不能實(shí)例化對象。 3.2:抽象類中可以有抽象方法,也可以有普通方法。 3.3:構(gòu)造方法不能聲明為抽象的,因?yàn)樽宇悷o法覆蓋。 3.4:子類繼承抽象類時(shí)必須重寫父類中所有的抽象方法,否則自己也要聲明為抽象類. 3.5:可以聲明抽象類的引用指向子類的對象。 動(dòng)態(tài)綁定 4 接口:關(guān)鍵字interface聲明接口。解決java不能多重繼承的機(jī)制。1.接口中的方法都是抽象的。2.接口中的方法默認(rèn)時(shí)public和abstract,所以public和abstract可以省略.3.接口中可以聲明屬性,屬性默認(rèn)為public static final4.接口使用關(guān)鍵字interface聲明,使用implem

5、ents實(shí)現(xiàn)接口. 問題: 接口和抽象的區(qū)別 ? 相同點(diǎn) 區(qū)別 : 繼承 : 代碼的可重用性抽象類 : 代碼的靈活性 固定的方法 (數(shù)據(jù)庫 )接口: 代碼的可擴(kuò)展性 java訪問權(quán)限修飾符public  protected  default private用法總結(jié)       首先聲明:java中,default這個(gè)修飾符并沒有顯式的聲明,在成員變量和方法前什么修飾符也不用,默認(rèn)的就是default。為了條理清晰,分三種不同情況來總結(jié)。   一 訪問權(quán)限修飾符修飾成員變量和方法   p

6、ublic:表明該成員變量和方法是共有的,能在任何情況下被訪問。      protected:必須在同一包中才能被訪問及其子類中可以(說的比較簡單,看個(gè)例子就明白了)           eg:class A                      protecte

7、d int weight;            protected int f( int a,int b   )                             / 方法體  &#

8、160;                                 假設(shè)B與A在同一個(gè)包中,則           class B      &

9、#160;               void g()                          A a=new A();        &

10、#160;     A.weight=100;/合法              A.f(3,4);    /合法                         

11、0; 特別說明:什么是在同一個(gè)包中?   答:用package打包在一起的class ,叫在同一個(gè)包中。(不明白,舉個(gè)例子)       eg:在JDK的srcjavaio中,你會(huì)看到許多java類,第一句源代碼都是package java.io;       沒有使用package打包的,在同一目錄下的類也會(huì)被視做同一個(gè)包。      default:在這種情況下中,同包中的子類。區(qū)別在第二和第三種情況中。 

12、60;      eg: class A                      int weight ;            int f( int a,int b   )    

13、60;                        / 方法體                            

14、        假設(shè)B與A在同一個(gè)包中,則           class B                      void g()        

15、60;                 A a=new A();              A.weight=100;/合法              A.f(3,4); 

16、0;  /合法                            private: 只能在本類中訪問。             eg:    class   Test

17、                                             private int money;    

18、60;                  Test()                                &

19、#160;                money=2000;                                 

20、             private int getMoney()                                   

21、             return money;                                    

22、60;        public  static  void main(String args)                                   &

23、#160;          Test te=new  Test();                         te.money=3000;         &#

24、160;   /合法                         int m=te.getMoney();       /合法            

25、60;            System.out.println("money="+m);                                &#

26、160;                                PS: 實(shí)際上,把重要的數(shù)據(jù)修飾為private,然后寫一個(gè)public的函數(shù)訪問它,正好體現(xiàn)了OOP的封裝特性,是OOP安全性的體現(xiàn)。    二  訪問權(quán)限修飾符修飾類   1

27、,不能用protected和private修飾類。   2,用default修飾的類叫友好類,在另外一個(gè)類中使用友好類創(chuàng)建對象時(shí),要保證它們在同一包中。   三   訪問權(quán)限修飾符與繼承   這里的訪問修飾符指的是修飾成員變量和方法??梢苑譃閮煞N情況:   1,子類與父類在同一包中    此時(shí)只有聲明為private的變量與方法不能被繼承(訪問)。   eg:     class Father &

28、#160;          private int money ;       int weight=100;                  class Son extends Father          &#

29、160; viod f()                money=10000;/   非法         weight=100; /   合法                  2,子

30、類與父類不在同一包中    此時(shí)private與default均不能被繼承(訪問), protected與public可以。     eg:       Father.java      package com.aaa      public class Father         &#

31、160;  int height ;       protected  int money=120;       public int weight;       protected int getMoney()                return m

32、oney;              void setMoney(int newMoney)                money=newMoney;                 

33、      Son.java      package com.bbb      import com.aaa.Father;      public class Son extends Father               void f()  

34、                  money=10000;/合法           /height=170;/非法,height為default修飾的變量           System.out.println(money);/輸出結(jié)

35、果是10000           /setMoney(300);          /非法           int number=getMoney();    /合法         

36、  System.out.println(number);/輸出結(jié)果是10000                     public  static  void main(String args)                

37、      Son sss=new Son();            sss.f();                    所以,訪問權(quán)限修飾符權(quán)限從高到低排列是public  ,protected  ,default, private。Java

38、中的abstract,static,final修飾符abstract修飾符      abstract使用對象:類、接口、方法介紹:類中包括沒有實(shí)現(xiàn)的方法,不能被實(shí)例化。如果是一個(gè)abstract方法,則方法體為空,該方法的實(shí)現(xiàn)在子類中被定義,并且包含一個(gè)abstract方法的類必須是一個(gè)abstract類abstract修飾符表示所修飾的類沒有完全實(shí)現(xiàn),還不能實(shí)例化。如果在類的方法聲明中使用abstract修飾符,表明該方法是一個(gè)抽象方法,它需要在子類實(shí)現(xiàn)。    在下面的情況下,類必須是抽象

39、類:    1.類中包含一個(gè)明確聲明的抽象方法;    2.類的任何一個(gè)父類包含一個(gè)沒有實(shí)現(xiàn)的抽象方法;    3.類的直接父接口聲明或者繼承了一個(gè)抽象方法,并且該類沒有聲明或者實(shí)現(xiàn)該抽象方法。    如下例所示:    abstract class A1            

40、public int v1;        abstract void test();        abstract class A2 extends A1             public int v2;        class

41、Sample extends A2             void test()         因?yàn)榘粋€(gè)抽象方法test,類A1必須被聲明為抽象類。它的子類A2繼承了抽象方法test,但沒有實(shí)現(xiàn)它,所以它也必須聲明為抽象類。然而,A2的子類Sample因?yàn)閷?shí)現(xiàn)了test,所以它不必聲明為抽象的。    注意:   

42、60;如果試圖創(chuàng)建一個(gè)抽象類的實(shí)例就會(huì)產(chǎn)生編譯錯(cuò)誤;    如果一個(gè)類是非抽象類卻包含一個(gè)抽象方法,就會(huì)產(chǎn)生編譯錯(cuò)誤;    構(gòu)造函數(shù)和靜態(tài)函數(shù)以及Final修飾的函數(shù)不能使用abstract修飾符;    接口缺省為abstract。 Static修飾符static使用對象:類、方法、變量、初始化函數(shù)通常,在創(chuàng)建類的實(shí)例時(shí),每個(gè)實(shí)例都會(huì)創(chuàng)建自己實(shí)例變量。但是在變量的聲明中可以使用Static修飾符,它表明該成員變量屬于類本身,獨(dú)立于類產(chǎn)生的任何對象。這種成員變量稱為靜態(tài)變量

43、(靜態(tài)屬性)。方法的聲明中也可以使用static修飾符,表明該方法從屬于類本身。靜態(tài)屬性和靜態(tài)方法不需要?jiǎng)?chuàng)建實(shí)例就可以使用。    典型的例子是java.lang包中的System類中的方法和變量。我們常用    System.out.println(“message”);    輸出信息,并沒有創(chuàng)建System的實(shí)例,是因?yàn)閜rintln方法聲明為System類的靜態(tài)方法,它不需創(chuàng)建實(shí)例就可以使用。    下面的例子會(huì)幫助你更深刻的理

44、解Static修飾符。注意各個(gè)代碼塊的加載次序。    class Sample            static int s1=3;        static int s2;        static void display()    &#

45、160;                System.out.println("s1="+s1);            System.out.println("s2="+s2);                s

溫馨提示

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

最新文檔

評論

0/150

提交評論