《Java類的特性》PPT課件.ppt_第1頁
《Java類的特性》PPT課件.ppt_第2頁
《Java類的特性》PPT課件.ppt_第3頁
《Java類的特性》PPT課件.ppt_第4頁
《Java類的特性》PPT課件.ppt_第5頁
已閱讀5頁,還剩44頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、主要內(nèi)容,Java類和對(duì)象的概念 (oop思想-內(nèi)功 語言外功) 類的結(jié)構(gòu)(包含屬性和行為)以及如何生成對(duì)象 類的3大特性:封裝,繼承,多態(tài) 打包的使用 常用方法:包裝類、equals、toString等,this引用,每個(gè)方法內(nèi)部,都有一個(gè)this引用變量,指向調(diào)用該方法的對(duì)象。一般情況下,成員前加不加this都行,這就好像同一個(gè)學(xué)校的學(xué)生在談?wù)撟约簩W(xué)校的事時(shí),不必說學(xué)校名字一樣,當(dāng)然為了強(qiáng)調(diào),可以加上“咱們學(xué)?!钡那熬Y 但在有些情況下,非得用this關(guān)鍵字不可 1、類成員變量和方法參數(shù)名字相同(這有利于程序的可讀性,為了區(qū)分,使用this關(guān)鍵字) Class Date int year;

2、public void setDate(int year) this.year=year; ,this引用(續(xù)),2、構(gòu)造方法是在對(duì)象產(chǎn)生時(shí)由Java自動(dòng)調(diào)用的,我們?cè)诔绦蛑胁荒芟笳{(diào)用其它方法一樣去調(diào)用構(gòu)造方法,但可以在一個(gè)構(gòu)造方法中用this(參數(shù)表)的形式來調(diào)用另一個(gè)構(gòu)造方法,有時(shí)可大大簡化程序 注意: this(參數(shù)表)必須是使用它的方法的 第一條語句,面向?qū)ο缶幊痰奶匦?我們已經(jīng)了解了類和對(duì)象,現(xiàn)在我們來了解一下面向?qū)ο缶幊痰囊恍┨匦裕?繼承、封裝、多態(tài),面向?qū)ο缶幊痰娜筇攸c(diǎn),封裝性(Encapsulation):實(shí)現(xiàn)模塊化(modularity)和信息隱藏(information

3、hiding),有利于程序的可移植性。 繼承性(Inheritance):可以定義一套對(duì)象之間的層次關(guān)系,下層的對(duì)象繼承了上層對(duì)象的特性,籍此可以實(shí)現(xiàn)程序代碼重用,并且有效的組織整個(gè)程序。 多態(tài)性(Polymorphism):根據(jù)程序運(yùn)行時(shí)對(duì)象的實(shí)例類型來選擇不同的信息處理。提高程序的可讀性和靈活性。,自然界通過繼承而繁衍發(fā)展 (龍生龍,鳳生鳳,老鼠兒子會(huì)打洞) 程序中的繼承是從抽象到具體的過程 (學(xué)生ACCP學(xué)員,學(xué)生不一定是accp學(xué)員,但accp學(xué) 員一定是學(xué)生) 繼承重用現(xiàn)有類生成新類 Java語言是單繼承語言,即每個(gè)子類只有一個(gè)直接父類,繼承,繼承舉例,爬行動(dòng)物類,哺乳動(dòng)物類,動(dòng)物類

4、,從抽象到具體,繼承,被繼承的類稱為父類 繼承父類的類稱為子類 執(zhí)行繼承時(shí),子類將獲得父類的屬性,并具有自身特有的屬性。,繼承是面向?qū)ο缶幊碳夹g(shù)的一塊基石,它允許創(chuàng)建分等級(jí)層次的類。運(yùn)用繼承,可以創(chuàng)建一個(gè)通用類定義一系列一般特性。該類可以被更具體的類繼承,Person類: name age,Student類: number,Teacher類: empClass,人類,具 有姓名和年齡兩個(gè)屬性,學(xué)生類,繼承了父 類的姓名和年齡屬 性外還包含學(xué)號(hào),老師類,繼承了父類的姓名和年齡屬性外還包含職稱,extends關(guān)鍵字,extends關(guān)鍵字用于繼承類。 聲明一個(gè)繼承父類的類的通常形式如下: class

5、 subclass-name extends superclass-name /類體 Java中所有類都由Object類派生而來,若沒有extends,則默認(rèn)父類為Object(在lang包中) 每個(gè)類只能有一個(gè)直接父類,即單繼承, Java中用接口實(shí)現(xiàn)多繼承,注意,直接繼承和間接繼承,直接繼承 class A class B extends A /A是B的直接父類 間接繼承 class A class B extends A class C extends B /A是C的間接父類 ,繼承的例子,class Vehicle /車輛類 int VehicleID;/車輛的ID號(hào) void set

6、Id(int ID)/給ID號(hào)賦值 VehicleID = ID; void displayID()/顯示車輛的ID號(hào) System.out.println(”車輛的號(hào)碼是:”+VehicleID); ,class Car extends Vehicle /轎車類 int mph;/車輛的時(shí)速 void setMph(int mph) this.mph = mph; void displayMph() System.out.println(”轎車的時(shí)速是:”+mph); ,class VehicleDemo public static void main(String args) /產(chǎn)生一個(gè)車

7、輛的對(duì)象 Car benz = new Car(); benz.setID(9527); benz.setMph(10); benz.displayID(); benz.displayMph(); ,成員變量的隱藏,子類通過隱藏父類的成員變量和重寫父類的方法,可以把父類的狀態(tài)和行為改變?yōu)樽约旱臓顟B(tài)和行為。 class A int x; void setX() x = 0; class B extends A /A是B的直接父類 int x;/隱藏了父類中的變量X void setX()/重寫了父類中的方法setX() x = 5; ,super關(guān)鍵字,Java提供一個(gè)super引用變量表示父類

8、 super關(guān)鍵字用來解決如何直接訪問或初始化從父類繼承來的成員。 在寫子類無參數(shù)構(gòu)造方法時(shí),不用顯式調(diào)用父類無參數(shù)構(gòu)造方法,系統(tǒng)會(huì)自動(dòng)提供 但在寫子類帶參數(shù)構(gòu)造方法時(shí),應(yīng)在第一句寫super(參數(shù))來初始化父類成員變量 見下頁,Super的例子一,class Father int x; Father() x = 3; System.out.println(“Calling Father : x=”+x); void doSomething() System.out.println(“Calling Father.doSomething”); ,class Son extends Father

9、 int x; Son() super(); x = 5; System.out.println(“Calling Son : x=”+x); void doSomething() super.doSomething(); System.out.println(“Calling Father.doSomething”); System.out.println(“Father.x=”+super.x+” Son.x=” +x); ,class SuperDemo public static void main(String args) Son son = new Son(); son.doSom

10、ething(); ,繼承示例,class Person String name; /姓名 int age; /年齡 Person() name = ”Tom”; age = 18; Person(String n, int a) name = n; age = a; public String getName() return name; public int getAge() return age;,class Student extends Person int number;/學(xué)號(hào) Student() Student(String n,int a,int no) number = no

11、; public int getNumber()return number; ,super(n,a);,class InheDemo public static void main(String args) Student s = new Student(); System.out.println(“缺省學(xué)生信息); System.out.println(姓名 : +s.getName(); System.out.println(年齡 : +s.getAge(); System.out.println(學(xué)號(hào) : +s.getNumber(); Student s1 = new Student(

12、John,20,101); System.out.println(學(xué)生信息); System.out.println(姓名 : +s1.getName(); System.out.println(年齡 : +s1.getAge(); System.out.println(學(xué)號(hào) : +s1.getNumber(); ,繼承的進(jìn)一步理解,某類對(duì)象引用毫無疑問指向該類對(duì)象,但若兩個(gè)類有繼承關(guān)系,則對(duì)象引用和對(duì)象就可能存在4種組合,例: Person p=new Person(); Student s=new Student(); Person ps=new Student();ok /向上塑型 St

13、udent stu=new Person();error 結(jié)論:父類對(duì)象引用可指向它的任何子類對(duì)象,不論是直接還是間接子類,反之不行,多態(tài),同樣的操作在不同的對(duì)象上有不同的行為,靜態(tài)多態(tài)(方法重載),不止是構(gòu)造方法可以重載,其實(shí)任何方法都能重載 方法重載:就是在同一個(gè)類中具有相同名稱,執(zhí)行基本相同操作,但是使用不同的參數(shù)列表的一組方法 編譯器通過參數(shù)的個(gè)數(shù)和類型確定調(diào)用重載方法的哪個(gè)版本 例:System.out.println(String); System.out.println(int);,重載類型,參數(shù)類型不同 int add(int,int); float add(float,flo

14、at); 參數(shù)個(gè)數(shù)不同 int add(int,int); int add(int,int,int); 注意:若參數(shù)類型和個(gè)數(shù)都相同,返回類型不同不算重載,方法重載的作用域規(guī)則,重載機(jī)制只有在方法聲明的同一作用域內(nèi)才有效,class first public: void display(); class second public: void display(); ,void main() first object1; second object2; /沒有發(fā)生方法重載 object1.display() object2.display(); ,方法的重載例子,方法的重載,public int

15、 div(int i,int j) return i/j; public double div(double d1,double d2) return d1/d2; public double div(int i) return i/5; ,方法重載練習(xí),1.編寫一個(gè)adder類,包含三個(gè)add方法,分別實(shí)現(xiàn)兩整數(shù)的相加/兩浮點(diǎn)數(shù)的相加/兩字符串的連接 2.編寫adder類的測試程序,方法重載練習(xí),方法簽名的三要素 方法名 方法參數(shù)個(gè)數(shù) 方法參數(shù)類型 哪個(gè)方法是對(duì)方法public void method().的重載? A)public void method2( int m). B)publi

16、c int method(). C)public void method(). D)public int method( int m, float f).,動(dòng)態(tài)多態(tài)(方法重寫),在繼承中,如果子類的一個(gè)方法與父類中的方法有相同的名字并具有相同數(shù)量和類型的參數(shù),這種情況稱為方法覆蓋 父類對(duì)象調(diào)用父類方法,子類對(duì)象調(diào)用子類方法 可以通過super關(guān)鍵字調(diào)用直接父類中被覆蓋的方法,方法重寫的例子,class C void abc() System.out.println(“Calling Cs” method abc); ,Class D extends C void abc() System.ou

17、t.println(“Calling Ds” method abc); ,Public class Dispatch() public static void main(String args) C c = new D(); c.abc(); ,方法重載與方法重寫的區(qū)別,重載: 1.同一類中 2.同方法名稱,但不同參數(shù)類型或者不同參數(shù)個(gè)數(shù) 重寫 1.父類與子類中 2.除了方法體不同,其它都相同,static 類變量,static修飾符 用于標(biāo)識(shí)該成員是類成員,還是類實(shí)例(對(duì)象)的成員 如:static int i=100; 類變量的使用 通過類直接調(diào)用 通過對(duì)象調(diào)用 類變量與實(shí)例變量的區(qū)別:

18、實(shí)例變量,由類產(chǎn)生的每個(gè)對(duì)象都具有實(shí)例變量的一個(gè)副本; 類變量,在內(nèi)存中只存在一個(gè)地方,可以被類的所有實(shí)例訪問,并對(duì)于所有實(shí)例都擁有相同的信息。 類變量的使用舉例 統(tǒng)計(jì)對(duì)象創(chuàng)建的個(gè)數(shù),static變量使用實(shí)例,為Student類添加一個(gè)靜態(tài)變量cTotalNum,用于統(tǒng)計(jì)創(chuàng)建的學(xué)生對(duì)象數(shù)。,static方法,類方法(靜態(tài)方法) 如: static double add(double x,double y) return x+y; 類的方法可以通過類名與對(duì)象兩種方法訪問 思考:為什么Main方法中只能訪問靜態(tài)變量和靜態(tài)方法?,static修飾符(判斷對(duì)錯(cuò)),class A public stat

19、ic void main(String args) double a=5.1;double b=20.32; double c=32.921; System.out.println(doubleAvg(a,b,c); double doubleAvg(double a,double b,double c) return (a+b+c)/3.0; ,static double doubleAvg(double a,double b,double c) return (a+b+c)/3.0; ,請(qǐng)修改錯(cuò)誤!,關(guān)鍵字final,final關(guān)鍵字可以修飾類、變量和方法 final關(guān)鍵字修飾變量常量:只

20、能被初始化1次 final double PI = 3,1415; final關(guān)鍵字修飾方法:不能進(jìn)行擴(kuò)展,也不允許子類覆蓋,但是可以繼承 final void aMethod() ; final關(guān)鍵字修飾類:不能被集成的類,final類中的方法都成為了final方法 final class FinalClass void method(); ,Final的例子,final class AFinalClass final String strA=“This is a final String”; public String strB=“This is not a final String”;

21、final public void print() System.out.println(“a final method name print”); public void showString() System.out.println(strA+“n”+StrB); ,Public class FinalDemo() public static void main(String args) AFinalClass f = new AFinalClass(); f.print(); f.showString(); ,封裝,信息隱藏電視內(nèi)有很多復(fù)雜零件,通過各種按鈕將內(nèi)部的復(fù)雜結(jié)構(gòu)給隱藏了。 簡

22、化操作只需通過調(diào)頻和音量等少量按鈕,就可以操縱電視。 程序的基本封裝單元是類,通過類的封裝,既可以將代碼單元化,又達(dá)到信息隱藏的目的。,簡單訪問控制,我們可在數(shù)據(jù)成員和成員函數(shù)前面添加修飾符public和private(protected后面詳細(xì)講解) public成員可從類外部的任何地方訪問。 而private成員將被隱藏,在類外不可見,這體現(xiàn)了數(shù)據(jù)封裝的思想。 要從類外訪問private成員,只能通過類的public成員函數(shù)來實(shí)現(xiàn)。,與類相關(guān)的幾個(gè)知識(shí)點(diǎn),我們學(xué)習(xí)了面向?qū)ο蟮?大特性,現(xiàn)在了解幾個(gè)相關(guān)的知識(shí)點(diǎn): instanceof運(yùn)算符 Object 類 equals()方法 toStr

23、ing()方法 Vector類,instanceof運(yùn)算符,對(duì)象引用既可指向本類對(duì)象,又可指向子類對(duì)象,為判斷對(duì)象類型,Java采用instanceof運(yùn)算符 用instanceof運(yùn)算符確定對(duì)象類型后,就可將父類引用轉(zhuǎn)換成相應(yīng)的子類引用,以便訪問子類獨(dú)有的屬性或方法,Object 類,Object類是類體系結(jié)構(gòu)的根 Java 系統(tǒng)中的每個(gè)類都是 Object 類直接或間接的子類 Object 類包括在 java.lang 包中 此類定義了所有對(duì)象都具備的基本狀態(tài)和行為 可以用類型為Object的變量來引用任意類型的對(duì)象,equals(),用于比較兩個(gè)對(duì)象是否相等,相等返回 true 但Object 類中提供的 equals 方法僅僅使用來確定對(duì)象是否相等,稱為淺度比較 因此子類一般通過覆蓋Object的equals方法來實(shí)現(xiàn)真正的比較,稱為深度比較,toString(),toString 用于返回對(duì)象的字符串表示。 建議所有子類都覆蓋此方法。 使用“+”運(yùn)算符將對(duì)象同一個(gè)字符串連接,Java編譯器會(huì)自動(dòng)調(diào)用toString方法,獲取對(duì)象的字符串表現(xiàn)形式。,Vector,VECTOR是一種容器,用來存放對(duì)象 需要導(dǎo)入util包。i

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(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ǔ)空間,僅對(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)論