第5章面向?qū)ο蟾呒?jí)特性_第1頁(yè)
第5章面向?qū)ο蟾呒?jí)特性_第2頁(yè)
第5章面向?qū)ο蟾呒?jí)特性_第3頁(yè)
第5章面向?qū)ο蟾呒?jí)特性_第4頁(yè)
第5章面向?qū)ο蟾呒?jí)特性_第5頁(yè)
已閱讀5頁(yè),還剩91頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、測(cè)驗(yàn)(20151012)class Test public static void main(String args) Person p1=new Person(李娜,1982); Person p2=new Person(彭帥,1986); if(p1.getBirth()p2.getBirth() System.out.println( p1.getName()+比+ p2.getName()+年齡大); 請(qǐng)寫出Person類的定義。第五章第五章面向?qū)ο蟾呒?jí)特性面向?qū)ο蟾呒?jí)特性2015-10-135.1 變量多態(tài)1.變量多態(tài)變量多態(tài)類型為類型為X X的參考變量,其指向的對(duì)象類型既可以的參考

2、變量,其指向的對(duì)象類型既可以是是X X,也可以是,也可以是X X的的子類子類如:如:Student x=new Collegian();Student y=new Student();【多態(tài)例5-1】class Student String studentNo,name; Student(String sn,String nm) studentNo=sn; name=nm; void showInfo() System.out.println (學(xué)號(hào):+studentNo); System.out.println (姓名:+name); class Collegian extends Stud

3、ent String major; Collegian (String sn,String nm,String mj) super(sn,nm); major=mj; void showInfo() super.showInfo(); System.out.println(專業(yè):+major); 【多態(tài)例5-1】class test public static void main (String argsp) Student s1,s2; s1=new Student(651003,王五); s1.showInfo(); s2=new Collegian(0810123,張三,計(jì)算機(jī)); Sy

4、stem.out.println(姓名:+); System.out.println(專業(yè):+s2.major); s2.showInfo(); 【分析例5-1的問(wèn)題】出錯(cuò)的語(yǔ)句: System.out.println(專業(yè):+s2.major); 改為: System.out.println(專業(yè):+(Collegian)s2).major); 原因: 通過(guò)對(duì)象名訪問(wèn)成員變量時(shí),取決于該對(duì)象通過(guò)對(duì)象名訪問(wèn)成員變量時(shí),取決于該對(duì)象聲明時(shí)的類型聲明時(shí)的類型,因此,因此s2s2聲明聲明時(shí)是時(shí)是StudentStudent類型,因此訪問(wèn)類型,因此訪問(wèn)majormajor會(huì)出錯(cuò);會(huì)出錯(cuò);

5、 而通過(guò)對(duì)象名調(diào)用方法時(shí),則取決于該對(duì)象而通過(guò)對(duì)象名調(diào)用方法時(shí),則取決于該對(duì)象實(shí)際的類型實(shí)際的類型,因此,因此s2.showInfo()s2.showInfo()是調(diào)用的子類的方法。是調(diào)用的子類的方法。2.補(bǔ)充幾個(gè)實(shí)例補(bǔ)充幾個(gè)實(shí)例理解覆蓋和隱藏的區(qū)別理解覆蓋和隱藏的區(qū)別(2.(2.1)1)實(shí)例方法能夠被覆蓋實(shí)例方法能夠被覆蓋class Super String name() return “mother; class Sub extends Super String name() return “baby; (2.(2.1)1)實(shí)例方法能夠被覆蓋實(shí)例方法能夠被覆蓋 class Test pub

6、lic static void main(String args) Super s = new Sub(); System.out.println((); 輸出輸出:baby(2.2)(2.2)靜態(tài)方法不能被覆蓋靜態(tài)方法不能被覆蓋class Super static String name() return “mother; class Sub extends Super static String name() return “baby; (2.2)(2.2)靜態(tài)方法不能被覆蓋靜態(tài)方法不能被覆蓋 class Test public static void main(String

7、args) Super s = new Sub(); System.out.println((); 輸出輸出:mother原因原因靜態(tài)方法在靜態(tài)方法在編譯編譯時(shí)根據(jù)時(shí)根據(jù)調(diào)用該方法的類調(diào)用該方法的類或或?qū)ο笏鶎俚念悓?duì)象所屬的類決定決定實(shí)例方法在實(shí)例方法在運(yùn)行運(yùn)行時(shí)根據(jù)時(shí)根據(jù)對(duì)象所屬的類對(duì)象所屬的類決定決定例如:例如: Super s = new Sub();編譯編譯時(shí)時(shí)s是是Super類的對(duì)象,而類的對(duì)象,而運(yùn)行運(yùn)行時(shí)時(shí)s指向指向Sub類的對(duì)象類的對(duì)象(2.3)屬性的隱藏屬性的隱藏class Base int x = 1; static int y=2;class Subclass

8、 extends Base int x = 4; int y=5;(2.3)屬性的隱藏屬性的隱藏public class Test public static void main(String args) Subclass s=new Subclass(); System.out.println(s.x + + s.y);輸出什么?輸出什么?修改修改(2.3):(2.3)public class Test public static void main(String args) Base s=new Subclass(); System.out.println(s.x + + s.y);輸出什

9、么?輸出什么?原因:原因:編譯編譯時(shí)根據(jù)類或?qū)ο箢愋蜎Q定時(shí)根據(jù)類或?qū)ο箢愋蜎Q定總結(jié)總結(jié)父類的實(shí)例方法被子類的同名實(shí)例方法父類的實(shí)例方法被子類的同名實(shí)例方法覆蓋覆蓋父類的靜態(tài)方法被子類的同名靜態(tài)方法父類的靜態(tài)方法被子類的同名靜態(tài)方法隱藏隱藏父類的實(shí)例變量和類變量父類的實(shí)例變量和類變量(static)可以被子類的實(shí)可以被子類的實(shí)例變量和類變量例變量和類變量隱藏隱藏(2.4)class Base int x = 1; static int y=2; String name() return mother; static String staticname() return static mother

10、; class Subclass extends Base int x = 4; int y=5; String name() return baby; static String staticname() return static baby; (2.4)public class Test public static void main(String args) Subclass s=new Subclass(); System.out.println(s.x + + s.y); System.out.println((); System.out.println(s.static

11、name(); Base ss=s; System.out.println(ss.x + + ss.y); System.out.println((); System.out.println(ss.staticname(); 隱藏和覆蓋的區(qū)別隱藏和覆蓋的區(qū)別將子類對(duì)象轉(zhuǎn)換為父類對(duì)象將子類對(duì)象轉(zhuǎn)換為父類對(duì)象( (直接賦值直接賦值) )后,后,可以訪問(wèn)被隱藏的變量和方法可以訪問(wèn)被隱藏的變量和方法( (編譯時(shí)根據(jù)類型決定編譯時(shí)根據(jù)類型決定) ),但是不能訪問(wèn)被覆蓋的變量和方法但是不能訪問(wèn)被覆蓋的變量和方法( (運(yùn)行時(shí)根據(jù)類型決定運(yùn)行時(shí)根據(jù)類型決定) )。3.instanceof操作符操

12、作符修改修改(2.4)可以根據(jù)對(duì)象所屬的類進(jìn)行不同的處理:可以根據(jù)對(duì)象所屬的類進(jìn)行不同的處理: public static void main(String args) Base ss=new Subclass(); if (ss instanceof Subclass) System.out.print(ss.x + + ss.y); System.out.print((); System.out.print(ss.staticname(); 還存在問(wèn)題?還存在問(wèn)題?class Base int x = 1; static int y=2;class Subclass exte

13、nds Base int x = 4; int y=5; int z=9;編譯出錯(cuò)編譯出錯(cuò)public static void main(String args) Base ss=new Subclass(); if (ss instanceof Subclass) System.out.print(ss.z); 解決方法解決方法對(duì)象類型轉(zhuǎn)換對(duì)象類型轉(zhuǎn)換public static void main(String args) Base ss=new Subclass(); if (ss instanceof Subclass) System.out.print(Subclass)ss).z);

14、 對(duì)象類型轉(zhuǎn)換對(duì)象類型轉(zhuǎn)換對(duì)對(duì)(2.2)的修改的修改class Super static String name() return mother; class Sub extends Super static String name() return baby; 對(duì)象類型轉(zhuǎn)換對(duì)象類型轉(zhuǎn)換對(duì)對(duì)(2.2)的修改的修改class Test public static void main(String args) Super s = new Sub(); System.out.println(Sub)s).name(); 對(duì)象類型轉(zhuǎn)換對(duì)象類型轉(zhuǎn)換對(duì)對(duì)(2.3)的修改的修改class Base int

15、x = 1; static int y=2;class Subclass extends Base int x = 4; int y=5;對(duì)象類型轉(zhuǎn)換對(duì)象類型轉(zhuǎn)換對(duì)對(duì)(2.3)的修改的修改public class Test public static void main(String args) Base s=new Subclass(); System.out.println(Subclass)s).x + + (Subclass)s).y);對(duì)對(duì)(2.4)的修改的修改public static void main(String args) Base ss=new Subclass(); i

16、f (ss instanceof Subclass) System.out.print(ss.x + + ss.y); System.out.print((); System.out.print(ss.staticname(); 將紅色的將紅色的ss都改為都改為(Subclass)ss),才可以得到子類的才可以得到子類的x和和y,調(diào)用子類的靜態(tài)方法調(diào)用子類的靜態(tài)方法staticname()5.1.2 多態(tài)的多態(tài)的用途用途1異類收集異類收集class Animal public void eat()class Dog extends Animal public void eat()

17、System.out.println(狗吃骨頭);class Cat extends Animal public void eat()System.out.println(貓吃老鼠);class Wolf extends Animal public void eat()System.out.println(吃喜羊羊);5.1.2 多態(tài)的多態(tài)的用途用途1異類收集異類收集class Test public static void main(String args) Animal aa=new Animal3; aa0=new Dog(); aa1=new Cat(); aa2=new Wolf()

18、; for(int i=0;i3;i+) aai.eat();5.1.2 多態(tài)的多態(tài)的用途用途1參數(shù)傳遞參數(shù)傳遞class Animal public int legs; public Animal(int legs)this.legs=legs;class Dog extends Animal public String name; public Dog(String name)super(4);=name; class Wolf extends Animal public Wolf()super(4);5.1.2 多態(tài)的多態(tài)的用途用途1參數(shù)傳遞參數(shù)傳遞class test

19、 public static void main(String args) Animal aa=new Animal2; aa0=new Dog(mike); aa1=new Wolf(); for(int i=0;i2;i+) showInfo(aai);static void showInfo(Animal a) System.out.println(a.legs); if(a instanceof Dog) System.out.println(Dog)a).name);5.2 非訪問(wèn)控制符5.2.1 static1.類變量/靜態(tài)變量【例5-8】public class scope st

20、atic int a; int b; public static void main(String args) a+; scope s1 = new scope(); s1.a+; s1.b+; scope s2 = new scope(); s2.a+; s2.b+; scope.a+; 1a1bs12a1bs23a4a【補(bǔ)充實(shí)例補(bǔ)充實(shí)例】 public class Person private int person_No; /人員編號(hào) public static int nextperson_No=1000; /下一個(gè)編號(hào) public Person() person_No=+nextpe

21、rson_No; 【補(bǔ)充實(shí)例補(bǔ)充實(shí)例】 class Test public static void main(String args) Person c1=new Person(); Person c2=new Person(); 【補(bǔ)充實(shí)例補(bǔ)充實(shí)例】 public class Person private int person_No; public static int nextperson_No=1000; public Person() person_No=+nextperson_No; public int getPerson_No() return person_No; 【補(bǔ)充實(shí)例補(bǔ)

22、充實(shí)例】 class Test public static void main(String args) Person c1=new Person(); Person c2=new Person(); System.out.println(“c1:nextperson_No”); System.out.println(c1. nextperson_No); System.out.println(“c1:person_No”); System.out.println(c1. getPerson_No(); Person+nextperson_No:int=1000-person_No:intc1

23、:Clerkperson_No=1001c2:Clerkperson_No=1002實(shí)例實(shí)例實(shí)例實(shí)例在這個(gè)示例中,為創(chuàng)建的每個(gè)對(duì)象分配了一個(gè)唯一的序列號(hào),在這個(gè)示例中,為創(chuàng)建的每個(gè)對(duì)象分配了一個(gè)唯一的序列號(hào),從從10001000開(kāi)始向上遞增。變量開(kāi)始向上遞增。變量nextperson_No在所有實(shí)例間共在所有實(shí)例間共享,因此當(dāng)一個(gè)對(duì)象的構(gòu)造器增加享,因此當(dāng)一個(gè)對(duì)象的構(gòu)造器增加nextperson_No的值時(shí),的值時(shí),下一個(gè)創(chuàng)建的對(duì)象就可接收到這個(gè)增加的值。下一個(gè)創(chuàng)建的對(duì)象就可接收到這個(gè)增加的值。類屬性說(shuō)明類屬性說(shuō)明使用使用static來(lái)標(biāo)記的變量是共享于類的所有實(shí)例的變量。來(lái)標(biāo)記的變量是共享于

24、類的所有實(shí)例的變量。例如:可以使用該變量作為實(shí)例間通信的基礎(chǔ),或者跟蹤已例如:可以使用該變量作為實(shí)例間通信的基礎(chǔ),或者跟蹤已創(chuàng)建的實(shí)例數(shù)。創(chuàng)建的實(shí)例數(shù)。如果如果static變量未被標(biāo)記為變量未被標(biāo)記為private,那么可從類外訪問(wèn)它。,那么可從類外訪問(wèn)它。這樣,不需要類的實(shí)例,就可通過(guò)類名引用它。這樣,不需要類的實(shí)例,就可通過(guò)類名引用它。 public class OtherClass public void incrementNumber() Person.nextperson_No+; 類屬性的使用類屬性的使用API中:如中:如Math.PI(不用創(chuàng)建不用創(chuàng)建Math類的對(duì)象就可類的對(duì)象

25、就可以使用以使用PI這個(gè)類屬性這個(gè)類屬性)作為作為全局變量全局變量,即只想用一個(gè)存儲(chǔ)區(qū)域來(lái)保存特定,即只想用一個(gè)存儲(chǔ)區(qū)域來(lái)保存特定的數(shù)據(jù)。無(wú)論創(chuàng)建多少個(gè)對(duì)象,甚至不創(chuàng)建對(duì)象都的數(shù)據(jù)。無(wú)論創(chuàng)建多少個(gè)對(duì)象,甚至不創(chuàng)建對(duì)象都可以使用??梢允褂?。思考:思考:1.銀行卡的年費(fèi)銀行卡的年費(fèi)2.排隊(duì)機(jī)排隊(duì)機(jī)銀行卡舉例銀行卡舉例 public class BankCard private String CardNO; /卡號(hào)卡號(hào) public static double annual_fee; /年費(fèi)年費(fèi) 補(bǔ)充實(shí)例補(bǔ)充實(shí)例 class Person private int person_No; private

26、 double person_salary; public static int nextperson_No=1000; public static double person_lowsalary=280; /最低工資 public Person(double salary) person_No=+nextperson_No; person_salary=person_lowsalary+salary; public int getPerson_No() return person_No; 2.類方法/靜態(tài)方法類方法示例類方法示例 class Person private int person

27、_No; public static int nextperson_No=1000; public Person() person_No=+nextperson_No; public int getPerson_No() return person_No; public static int getNextperson_No() return nextperson_No; 使用類名訪問(wèn)靜態(tài)方法使用類名訪問(wèn)靜態(tài)方法public class Test public static void main(String args ) System.out.println(“Number of person

28、 is”+Person. getNextperson_No(); Person c1=new Person(); System.out.println(“Number of person is”+Person. getNextperson_No(); static方法說(shuō)明方法說(shuō)明main()方法方法是是static方法,因?yàn)閳?zhí)行方法,因?yàn)閳?zhí)行main方法時(shí),方法時(shí),JVM并并不創(chuàng)建類的實(shí)例。因此如果有成員數(shù)據(jù),必須創(chuàng)建對(duì)象來(lái)訪不創(chuàng)建類的實(shí)例。因此如果有成員數(shù)據(jù),必須創(chuàng)建對(duì)象來(lái)訪問(wèn)它。問(wèn)它。如:如:Math類的運(yùn)算方法類的運(yùn)算方法都定義為都定義為static,可以直接通過(guò),可以直接通過(guò)Math.

29、 .方法名方法名()()來(lái)訪問(wèn)。來(lái)訪問(wèn)。static方法說(shuō)明方法說(shuō)明除了除了局部變量、局部變量、static屬性及其參數(shù)屬性及其參數(shù)外,外,static方法不能訪方法不能訪問(wèn)任何變量。問(wèn)任何變量。如果試圖訪問(wèn)非如果試圖訪問(wèn)非static屬性會(huì)引起編譯器錯(cuò)誤。屬性會(huì)引起編譯器錯(cuò)誤。非非static屬性綁定到一個(gè)實(shí)例上并且只有通過(guò)實(shí)例引用才能屬性綁定到一個(gè)實(shí)例上并且只有通過(guò)實(shí)例引用才能訪問(wèn)。訪問(wèn)。錯(cuò)誤的例子錯(cuò)誤的例子 class Person private int person_No; public static int nextperson_No=1000; public Person() p

30、erson_No=+nextperson_No; public int getPerson_No() return person_No; public static int getNextperson_No() return person_No; /編譯錯(cuò)誤 判斷哪些語(yǔ)句錯(cuò)誤?判斷哪些語(yǔ)句錯(cuò)誤? class Test static int num; int c; public static void main(String args ) num=100; c=100; static void ss() num=100; c=100; void tt() num=100; c=100; 正確的寫

31、法正確的寫法 class Test static int num; int c; public static void main(String args ) num=100; Test t=new Test(); t.c=100; 分析該例,找出錯(cuò)在哪兒?分析該例,找出錯(cuò)在哪兒?class InstanceTest int Variable; static public int method() return Variable; static public void method2(int variable) this.Variable=variable; 靜態(tài)初始化器靜態(tài)初始化器靜態(tài)初始化靜

32、態(tài)初始化一個(gè)類可以在一個(gè)類可以在“靜態(tài)塊靜態(tài)塊”中(而非方法體內(nèi))包含中(而非方法體內(nèi))包含代碼代碼靜態(tài)塊代碼僅在加載類時(shí)執(zhí)行一次靜態(tài)塊代碼僅在加載類時(shí)執(zhí)行一次如果類中包含多個(gè)靜態(tài)塊,它們將被按照在類中出如果類中包含多個(gè)靜態(tài)塊,它們將被按照在類中出現(xiàn)的順序執(zhí)行現(xiàn)的順序執(zhí)行示例示例1 class Count public static int counter; static counter=10; public class Test public static void main(String args ) System.out.println(“counter=”+Count.counter)

33、; 示例示例2 class ss static System.out.println(“hi”); public class Test public static void main(String args) ss t1=new ss(); ss t2=new ss(); ss t3=new ss(); 初始化初始化實(shí)例變量的初始化實(shí)例變量的初始化構(gòu)造函數(shù)構(gòu)造函數(shù)類變量類變量(static變量變量)的初始化的初始化靜態(tài)初始化器靜態(tài)初始化器作業(yè)作業(yè)編寫一個(gè)例子,實(shí)現(xiàn)多態(tài),內(nèi)容自選:編寫一個(gè)例子,實(shí)現(xiàn)多態(tài),內(nèi)容自選:如圖形類的例子、學(xué)生類的例子等等。如圖形類的例子、學(xué)生類的例子等等。5.2.2 f

34、inal1.最終類最終類final類不能被子類化。類不能被子類化。如:類如:類java.lang.String是是final類,這樣做是出于安全的考類,這樣做是出于安全的考慮。如果方法引用一個(gè)字符串,那么它就是一個(gè)慮。如果方法引用一個(gè)字符串,那么它就是一個(gè)String類的類的串,而不是串,而不是String修改后的可能已經(jīng)改變的子類的串。修改后的可能已經(jīng)改變的子類的串。final類不能有子類類不能有子類 final class VeryVeryGoodClass class General extends VeryVeryGoodClass 編譯錯(cuò)誤編譯錯(cuò)誤2.最終方法最終方法標(biāo)記為標(biāo)記為fi

35、nal的方法不能被覆蓋。的方法不能被覆蓋。出于安全的考慮,如果方法的實(shí)現(xiàn)不應(yīng)改變,而且對(duì)對(duì)象的出于安全的考慮,如果方法的實(shí)現(xiàn)不應(yīng)改變,而且對(duì)對(duì)象的一致性狀態(tài)很重要,則可以創(chuàng)建一個(gè)一致性狀態(tài)很重要,則可以創(chuàng)建一個(gè)final方法。方法。final方法不能被覆蓋方法不能被覆蓋 class parent public final void tt() class child extends parent public void tt() 編譯錯(cuò)誤編譯錯(cuò)誤3.最終變量最終變量final類型的變量代表常量,只能一次賦值。類型的變量代表常量,只能一次賦值。如:如:public class test publi

36、c static void main(String args) final int x; x=100; x=200; /出錯(cuò)出錯(cuò) 5.2.3 abstractabstract1.抽象類抽象類抽象類:只能被繼承,不能實(shí)例化的類。抽象類:只能被繼承,不能實(shí)例化的類。定義格式:定義格式: abstract class 類名類名2.2.抽象方法抽象方法abstract修飾的方法是抽象方法,也就是只定義了方法頭部,沒(méi)有方法體。定義格式為: abstract 返回值類型 方法名(參數(shù)表);改寫動(dòng)物例子改寫動(dòng)物例子1abstract class Animal public abstract void eat

37、();class Dog extends Animal public void eat()System.out.println(狗吃骨頭);class Cat extends Animal public void eat()System.out.println(貓吃老鼠);class Wolf extends Animal public void eat()System.out.println(吃喜羊羊);3.抽象類和抽象方法的關(guān)系抽象類和抽象方法的關(guān)系抽象類不一定含有抽象方法,但含有抽象方法的類一定是抽象類。 如下例: abstract class father abstract void

38、tt(); void tt1() System.out.println(father); 3.抽象類和抽象方法的關(guān)系抽象類和抽象方法的關(guān)系如果子類沒(méi)有實(shí)現(xiàn)抽象類中如果子類沒(méi)有實(shí)現(xiàn)抽象類中所有的抽象方法所有的抽象方法,那么子類要定義為抽象類。,那么子類要定義為抽象類。如下例的如下例的sonson就應(yīng)該定義為抽象類。就應(yīng)該定義為抽象類。 abstract class father abstract void tt(); abstract void tt1(); class son extends father void tt() System.out.println(son); 5.3 接口接口5

39、.3.1 說(shuō)明Java通過(guò)接口來(lái)彌補(bǔ)它單重繼承的不足接口之間是多重繼承 一個(gè)接口可以有多個(gè)父接口一個(gè)接口可以有多個(gè)父接口 一個(gè)類可以實(shí)現(xiàn)多個(gè)接口一個(gè)類可以實(shí)現(xiàn)多個(gè)接口5.3.2 接口的定義接口的定義l接口使用接口使用interface關(guān)鍵字聲明關(guān)鍵字聲明l接口中只能包含:接口中只能包含:抽象方法:抽象方法:public abstract常量:常量:public static finall常量和方法的修飾符均可以省略常量和方法的修飾符均可以省略【補(bǔ)充實(shí)【補(bǔ)充實(shí)例例】假設(shè)一組對(duì)象有相同的能力:它們都能飛。假設(shè)一組對(duì)象有相同的能力:它們都能飛。可以構(gòu)造一個(gè)公有接口,稱為可以構(gòu)造一個(gè)公有接口,稱為Fl

40、yer,它支持三個(gè)操作:它支持三個(gè)操作:takeOff、land和和fly。接口接口 Flyer+takeOff()+land()+fly()+takeOff()+land()+fly()AirplaneFlyer接口的定義接口的定義 public interface Flyer public void takeOff(); public void land(); public void fly(); 5.3.3 接口的實(shí)現(xiàn)class 類名 implements 接口名列表類體類實(shí)現(xiàn)接口首先要繼承接口,然后再重寫方法體(必須實(shí)現(xiàn)接口中每個(gè)方法)如果一個(gè)類同時(shí)實(shí)現(xiàn)多個(gè)接口,接口名之間用逗號(hào)隔開(kāi)【

41、Airplane實(shí)現(xiàn)Flyer接口】 public class Airplane implements Flyer public void takeOff(). public void land(). public void fly(). Flyer接口的多重實(shí)現(xiàn)接口的多重實(shí)現(xiàn)接口接口 Flyer+takeOff()+land()+fly()+takeOff()+land()+fly()Airplane+takeOff()+land()+fly()+buildNest()+layEggs()Bird+takeOff()+land()+fly()+leapBuilding()+stopBulle

42、t()Superman【說(shuō)明【說(shuō)明1】接口支持接口支持多重繼承多重繼承,一個(gè)子接口可以有多個(gè)父接口。,一個(gè)子接口可以有多個(gè)父接口。如:如: interface xx public void tt(); public void ss(); interface yy public void mm(); interface zz extends xx,yy 【說(shuō)明【說(shuō)明2】p實(shí)現(xiàn)接口時(shí)必須將接口中的實(shí)現(xiàn)接口時(shí)必須將接口中的所有方法所有方法都加以實(shí)現(xiàn)。都加以實(shí)現(xiàn)。否則該類還是抽象類否則該類還是抽象類p一個(gè)類可以實(shí)現(xiàn)一個(gè)類可以實(shí)現(xiàn)多個(gè)接口多個(gè)接口p擴(kuò)展子句擴(kuò)展子句(extends)必須在實(shí)現(xiàn)子句必須在實(shí)

43、現(xiàn)子句(implements)前前示例示例 class aa implements xx,yy public void tt() public void ss() public void mm() 接口接口 Flyer+takeOff()+land()+fly()+takeOff()+land()+fly()Airplane+takeOff()+land()+fly()+buildNest()+layEggs()+eat()Bird+takeOff()+land()+fly()+leapBuilding()+stopBullet()+eat()Superman+eat()AnimalVehic

44、le繼承和實(shí)現(xiàn)的混合繼承和實(shí)現(xiàn)的混合Bird類類 public class Bird extends Animal implements Flyer public void takeOff() /*實(shí)現(xiàn)實(shí)現(xiàn)takeOff()方法方法*/ public void land() /*實(shí)現(xiàn)實(shí)現(xiàn)land()方法方法*/ public void fly() /*實(shí)現(xiàn)實(shí)現(xiàn)fly()方法方法*/ public void buildNest() /*行為行為*/ public void layEggs() /*行為行為*/ public void eat() /*覆蓋覆蓋eat()方法方法*/ 機(jī)場(chǎng)類機(jī)場(chǎng)類

45、class Airport void givePermissionToLand(Flyer f) f.land(); public static void main(String args) Flyer s1=new Airplane(); Flyer s2=new Superman(); Airport aa=new Airport(); aa.givePermissionToLand(s1); aa.givePermissionToLand(s2); 【說(shuō)明【說(shuō)明3】接口可以捕獲無(wú)關(guān)聯(lián)類之間的相似性,而無(wú)需強(qiáng)加接口可以捕獲無(wú)關(guān)聯(lián)類之間的相似性,而無(wú)需強(qiáng)加類關(guān)系類關(guān)系5.4 訪問(wèn)控制符訪問(wèn)控

46、制類中的成員類中的成員(變量和方法變量和方法)有四種訪問(wèn)限制:有四種訪問(wèn)限制:public、protected、default和和private類類可以是可以是public或或default類中成員的四種訪問(wèn)性準(zhǔn)則訪問(wèn)控制例1錯(cuò)誤只能訪問(wèn)同一個(gè)類中的private成員import java.util.Date; class Employee private String name; private double salary; private Date birthDate; public String getDetails() return name+salary; public class Test1 public static void main (String args) Employee x=new Employee(); =Jack; x.salary=5000; System.out.println(x.getDetails(); Test1.java訪問(wèn)控制例2可以訪問(wèn)其他包中的public成員

溫馨提示

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

評(píng)論

0/150

提交評(píng)論