Java面向?qū)ο蟪绦蛟O(shè)計_第1頁
Java面向?qū)ο蟪绦蛟O(shè)計_第2頁
Java面向?qū)ο蟪绦蛟O(shè)計_第3頁
Java面向?qū)ο蟪绦蛟O(shè)計_第4頁
Java面向?qū)ο蟪绦蛟O(shè)計_第5頁
已閱讀5頁,還剩73頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、Java面向?qū)ο蟪绦蛟O(shè)計1主要內(nèi)容面向?qū)ο蟮脑O(shè)計思想Java類的定義構(gòu)造方法對象的創(chuàng)建和使用static關(guān)鍵字類的繼承this、super關(guān)鍵字計算機科學與技術(shù)系方法的重載和覆蓋package和import語句final關(guān)鍵字抽象類和接口2面向?qū)ο蠹夹g(shù)基礎(chǔ)1. 面向?qū)ο蟮幕舅枷朊嫦驅(qū)ο笫且环N程序設(shè)計方法?;舅枷耄菏褂脤ο?、類、繼承、封裝、消息等基本概念來進行程序設(shè)計。優(yōu)點:符合人們?nèi)粘W匀坏乃季S習慣(因為它是從現(xiàn)實世界中客觀存在的事物(即對象)出發(fā)來構(gòu)造軟件系統(tǒng),并且在系統(tǒng)構(gòu)造中盡可能運用人類的自然思維方式)。降低、分解問題的難度和復雜性,提高整個求解過程的可控制性、可監(jiān)視性、可擴充性和可

2、維護性計算機科學與技術(shù)系3面向?qū)ο蠹夹g(shù)基礎(chǔ)2. 面向?qū)ο蟮脑O(shè)計思想分析問題時,不再分解其每一個過程。而是首先要考慮的是該問題域中涉及到哪些類(對象)這些類(對象)各有哪些屬性和方法;這些類(對象)之間的關(guān)系如何。計算機科學與技術(shù)系4面向?qū)ο蠹夹g(shù)基礎(chǔ)3. 類與對象之間的關(guān)系對象是表示現(xiàn)實世界中某個具體的事物;類是對對象的抽象描述。張三 類(CLASS) 如: “man class ”對對象進行抽象為類對類進行實例化5面向?qū)ο蠹夹g(shù)基礎(chǔ)4. 面向?qū)ο蟮幕咎卣鞣庋b性:就是把對象的屬性和服務(wù)結(jié)合成一個獨立的相同單位,并盡可能隱蔽對象的內(nèi)部細節(jié)。其兩個主要目的:一是保護類中的數(shù)據(jù),二是隱藏細節(jié)。繼承性:

3、主要目的是為了“擴展”原本類的功能,加強或改進原本類所沒有定義的屬性及方法。父類和子類多態(tài)性:一個消息被不同的類型的對象或相同類型的對象接收時產(chǎn)生不同的行為。計算機科學與技術(shù)系6計算機科學與技術(shù)系Java類成員變量的聲明格式為: 修飾符 (=缺省值)成員方法的聲明格式為:3.1Java類的定義一種引用數(shù)據(jù)類型是組成Java程序的基本要素有兩部分組成:成員變量和成員方法 修飾符 (形參表) /Animal.javaclass Animal /成員變量定義 public int legs; /成員方法定義 public void eat() System.out.println(“Eating”)

4、; pubilc void move() System.out.println(“Moving”); 7計算機科學與技術(shù)系Java權(quán)限修飾符private、protected、public置于類的成員定義之前,用來限定其他對象對該對象成員的訪問權(quán)限。缺省為包級權(quán)限3.1Java類的定義8計算機科學與技術(shù)系修飾符使用說明:3.1Java類的定義只有公用的程序中的某些方法,才會使用public修飾符。某個成員對于大部分程序來說不太會使用到,但是對于別的package中繼承的子類中會使用到,則使用protected修飾符。如果只想讓同package中的類使用的方法或是屬性,則使用(default)修

5、飾符。對于只是自己類內(nèi)部所使用的屬性或方法,則使用private修飾符來隱藏它們。如果你不確定該用何種修飾符,最好設(shè)定為(default)9計算機科學與技術(shù)系對于class的權(quán)限修飾符只可以用public和default。3.1Java類的定義public類,可以在任意地方被訪問。default類,只可以被同一個包內(nèi)的類訪問。10計算機科學與技術(shù)系必須使用new關(guān)鍵字創(chuàng)建對象。 例:使用 對象(引用).成員變量 來引用對象的成員變量。 例:使用 對象(引用).方法(參數(shù)列表) 來調(diào)用對象的方法 例:同一個類的每個對象有不同的成員變量存儲空間。同一個類的每個對象共享此類的方法。3.2對象的創(chuàng)建和

6、使用Person p1 = new Person();int id = p1.id;p1.setAge(22);/Zoo.javapublic class Zoo public static void main(String args) Animal animal1 = new Animal(); Animal animal2; animal2 = new Animal(); animal1.legs = 4; System.out.println(animal1 has + animal1.legs+ legs.); System.out.println(animal2 has + anim

7、al2.legs+ legs.); animal1.eat(); animal2.move(); 11計算機科學與技術(shù)系必須使用new關(guān)鍵字創(chuàng)建對象。 例:使用 對象(引用).成員變量 來引用對象的成員變量。 例:使用 對象(引用).方法(參數(shù)列表) 來調(diào)用對象的方法 例:同一個類的每個對象有不同的成員變量存儲空間。同一個類的每個對象共享此類的方法。3.2對象的創(chuàng)建和使用Person p1 = new Person();int id = p1.id;System.out.println(id);Person p1 = new Person();p1.setAge(22);(stack seg)

8、12計算機科學與技術(shù)系是定義在Java類中的一個用來初始化對象的方法。Java中的每個類都有構(gòu)造方法,用來初始化該類的一個對象。構(gòu)造方法的語法格式為:例:Animal類的構(gòu)造方法3.3構(gòu)造方法 ()/Animal.javapublic class Animal public int legs; public Animal(int l) legs = l; public void eat() System.out.println(Eating); public void move() System.out.println(Moving); 13計算機科學與技術(shù)系創(chuàng)建對象時,使用構(gòu)造方法初始化對象

9、的成員變量。接上例:3.3構(gòu)造方法/Zoo.javapublic class Zoo public static void main(String argv) Animal animal1 = new Animal(4); Animal animal2 = new Animal(2); /Animal animal3 = new Animal(); System.out.println(animal1 has + animal1.legs + legs.); System.out.println(animal2 has + animal2.legs + legs.); animal1.eat(

10、); animal2.move(); 14計算機科學與技術(shù)系構(gòu)造方法特點:3.3構(gòu)造方法構(gòu)造方法沒有返回值,也不需要指定為void。構(gòu)造方法的名稱一定和類名稱一樣。構(gòu)造方法只能由new運算符調(diào)用。當沒有指定構(gòu)造方法時,編譯器會為類自動添加形如 類名() 的構(gòu)造方法,成員變量的取值為各種類型的默認值當我們自行編寫一個構(gòu)造方法之后,Java在編譯時就不再會幫加上前面提到的那個默認的無參構(gòu)造方法。使用不同數(shù)量、不同類型的參數(shù)對類初始化會擁有多個構(gòu)造方法15計算機科學與技術(shù)系用static關(guān)鍵字可以聲明類變量(靜態(tài)變量)和類方法(靜態(tài)方法)。類變量為該類的所有對象共享。類變量可通過類名直接訪問,也可以

11、通過該類的對象訪問。類變量在定義時必須進行初始化。類變量在類加載時,就分配了內(nèi)存空間。例:TestStatic.java3.4static關(guān)鍵字16計算機科學與技術(shù)系用static關(guān)鍵字可以聲明靜態(tài)變量(類變量)和靜態(tài)方法(類方法)。靜態(tài)變量僅在生成第一個對象時分配內(nèi)存。類的靜態(tài)變量為該類的所有對象共享。靜態(tài)變量可通過類名直接訪問,也可以通過該類的對象訪問。static方法中不可訪問非static的成員。3.4static關(guān)鍵字/TestStatic.javaclass Cat static int sid = 0; /sid為靜態(tài)變量,用于計數(shù) String name; int id; /i

12、d為成員變量,表示編號 Cat(String name) id = +sid; = name; public void Info() System.out.println(My name is + name + and No. is + id); 17計算機科學與技術(shù)系用static關(guān)鍵字可以聲明靜態(tài)變量(類變量)和靜態(tài)方法(類方法)。3.5static關(guān)鍵字TestStatic.javapublic class TestStatic public static void main(String args) Cat.sid = 100; Cat mimi = new Cat

13、(mimi); Cat pipi = new Cat(pipi); mimi.Info(); pipi.Info(); 18計算機科學與技術(shù)系思考分析:如果將程序中的 static int sid = 0; 改為 int sid = 0; 編譯執(zhí)行時將會出現(xiàn)什么情況?注意:static方法中不可訪問非static的成員。3.4static關(guān)鍵字19計算機科學與技術(shù)系Java中使用extends關(guān)鍵字實現(xiàn)類的繼承機制。語法規(guī)則:Java只支持單繼承,不允許多繼承。注意:修飾符為private的屬性和方法不會被繼承。注意:構(gòu)造方法也不會被繼承。根類:java.lang.Object類3.5類的繼承

14、修飾符 class 子類名 extends 父類名 /Fish.javapublic class Fish extends Animal public Fish() 20計算機科學與技術(shù)系Java中使用extends關(guān)鍵字實現(xiàn)類的繼承機制。語法規(guī)則:Java只支持單繼承,不允許多繼承。通過繼承,子類自動擁有父類的除private類型之外的所有成員變量和成員方法。根類:java.lang.Object類3.5類的繼承 class SubClass extends SuperClass /TestExtends.javaclass Person private int id; private in

15、t age = 20; public int getAge() return age; public void setAge(int i) age = i; public int getId() return id; class Student extends Person private String school; public String getSchool() return school; public void setSchool(String n) school = n; 21計算機科學與技術(shù)系Java中使用extends關(guān)鍵字實現(xiàn)類的繼承機制。語法規(guī)則:3.7類的繼承 clas

16、s SubClass extends SuperClass /TestExtends.javapublic class TestExtends public static void main(String args) Student st1 = new Student(); st1.setAge(22); st1.setSchool(ycu); System.out.println(“ID: + st1.getId(); /System.out.println(“ID: + st1.id); System.out.println(AGE: + st1.getAge(); System.out.

17、println(SCHOOL: + st1.getSchool(); 22計算機科學與技術(shù)系在類的方法定義中使用的this關(guān)鍵字代表使用該方法的對象的引用。當必須指出當前使用方法的對象是誰時要用this。有時使用this可以處理成員變量和和重名的情況。this可以看作是一個變量,它的值是當前對象的引用例:TestThis.javathis()則是調(diào)用自己類的構(gòu)造方法,它只能在構(gòu)造方法中使用,且必須放在第一行。3.6this、super關(guān)鍵字TestThis.javapublic class TestThis int i = 0; TestThis(int i) this.i = i; /thi

18、s指該對象本身 TestThis increament() i+; return this; /this指調(diào)用該方法的對象 void print() System.out.println(i= + i); public static void main(String args) TestThis tt = new TestThis (100); tt.increament().print(); 輸入結(jié)果:i=10123public class Animal public int legs; public Animal() System.out.println(Constructing); pu

19、blic Animal(int l) this(); /調(diào)用自己類的構(gòu)造方法 legs = l; public static void main(String args) Animal animal1 = new Animal(4); 24計算機科學與技術(shù)系Java中使用super關(guān)鍵字來引用父類的成員。例:TestSuper.java3.6this、super關(guān)鍵字25計算機科學與技術(shù)系Java中使用super關(guān)鍵字來引用父類的成員。例:TestSuper.java3.10super關(guān)鍵字/TestSuper.javaclass FatherClass public int value; p

20、ublic void f() value = 100; System.out.println(FatherClass.value = + value); class ChildClass extends FatherClass public int value; public void f() super.f(); value = 200; System.out.println(ChildClass.value = + value); 263.6this、super關(guān)鍵字/TestSuper.javapublic class TestSuper public static void main(

21、String args) ChildClass cc = new ChildClass(); cc.f(); 輸出結(jié)果為:FatherClass.value = 100ChildClass.value = 20027計算機科學與技術(shù)系super()是調(diào)用父類的構(gòu)造方法;它只能使用在構(gòu)造方法中的第一行,且必須放在第一行。例: class A public A(int i) class B extends A public B() super(0); .注意:Super()和this( )同時只能使用一種。3.6this、super關(guān)鍵字28計算機科學與技術(shù)系子類的構(gòu)造過程中必須調(diào)用其父類的構(gòu)造方

22、法。調(diào)用方法:顯式和隱式 1. 顯式:子類可以在自己的構(gòu)造方法super(參數(shù)列表)調(diào)用父類的構(gòu)造方法。 注:如果調(diào)用super(參數(shù)列表),則必須寫在子類構(gòu)造方法的第一行。 2. 隱式:如果子類的構(gòu)造方法中沒有顯式地調(diào)用父類的構(gòu)造方法,則系統(tǒng)默認先調(diào)用父類無參的構(gòu)造方法。如果子類構(gòu)造方法中既沒顯式調(diào)用父類構(gòu)造方法,而父類中又沒有無參的構(gòu)造方法,則編譯出錯。 例:TestSuperSub.java3.7繼承中的構(gòu)造方法29計算機科學與技術(shù)系子類的構(gòu)造過程中必須調(diào)用其父類的構(gòu)造方法。子類可以在自己的構(gòu)造方法super(參數(shù)列表)調(diào)用父類的構(gòu)造方法。3.7繼承中的構(gòu)造方法使用this(參數(shù)列表)調(diào)

23、用本類的另外的構(gòu)造方法。如果調(diào)用super(參數(shù)列表),則必須寫在子類構(gòu)造方法的第一行。class SuperClass private int n; SuperClass() System.out.println(SuperClass(); SuperClass(int n) System.out.println(SuperClass( + n + ); this.n = n; 30計算機科學與技術(shù)系子類的構(gòu)造過程中必須調(diào)用其父類的構(gòu)造方法。子類可以在自己的構(gòu)造方法super(參數(shù)列表)調(diào)用父類的構(gòu)造方法。3.11繼承中的構(gòu)造方法使用this(參數(shù)列表)調(diào)用本類的另外的構(gòu)造方法。如果調(diào)用su

24、per(參數(shù)列表),則必須寫在子類構(gòu)造方法的第一行。class SubClass extends SuperClass private int n; SubClass() super(300); System.out.println(SubClass(); SubClass(int n) System.out.println(SubClass( + n + ); this.n = n; public class TestSuperSub public static void main(String args) SubClass sc1 = new SubClass(); SubClass sc

25、2 = new SubClass(4000); 輸出結(jié)果:SuperClass(300)SubClass()SuperClass()SubClass(4000)31計算機科學與技術(shù)系練習:3.7繼承中的構(gòu)造方法分析下列程序的輸出結(jié)果,體會構(gòu)造方法和一般成員方法在繼承中的區(qū)別。32計算機科學與技術(shù)系練習:3.11繼承中的構(gòu)造方法分析下列程序的輸出結(jié)果,體會構(gòu)造函數(shù)和一般成員函數(shù)在繼承中的區(qū)別。class A protected void print(String s) System.out.println(s); A() print(A(); /A(String s) print(A(s); p

26、ublic void f() print(A:f(); public class B extends A B() /super( A(); print(B(); public void f() print(B:f(); public static void main(String args) B b = new B(); b.f(); 33計算機科學與技術(shù)系是指一個類中可以定義有相同的名字、但參數(shù)個數(shù)或類型不同的多個方法。調(diào)用時,編譯器會根據(jù)不同的參數(shù)表選擇對應的方法。例如:TestOverLoading.java3.8方法的重載/TestOverloading.javaclass Overl

27、oading void receive(int i) System.out.println(Receive one int data: ); System.out.println(i=“ + i); void receive(int x, int y) /方法重載 System.out.println(Receive two int datas: ); System.out.println(x=“ + x + y=“ + y); public class TestOverloading public static void main(String args) Overloading ol =

28、new Overloading(); ol.receive(1); ol.receive(2, 3); 34計算機科學與技術(shù)系方法重載時需要遵守的規(guī)則:3.8方法的重載多個方法享有相同的名字。區(qū)別在于:是參數(shù)的個數(shù)或者是參數(shù)類型不同。參數(shù)類型的區(qū)分度一定要足夠,例如不能是同一簡單類型的參數(shù),如int與long。返回類型不能用來區(qū)分重載的方法。構(gòu)造方法與普通方法一樣,也可以重載。35計算機科學與技術(shù)系例如:3.8方法的重載下面是合法的重載: public void test() public void test(String str) public void test(int i, int j)

29、 public char test(char c)下面這些則屬于不合法的重載: public void test(int i) public void test(byte j) public byte test(int k)36計算機科學與技術(shù)系方法重載常用于構(gòu)造方法。例如:3.8方法的重載class Point int x, y; Point() /構(gòu)造函數(shù)x = 0; y = 0; Point(int x, int y) /重載構(gòu)造函數(shù)this.x = x; this.y = y; 37計算機科學與技術(shù)系覆蓋:在子類中根據(jù)需要對從父類中繼承來的方法進行重寫。注意:重寫方法必須和被重寫方法具

30、有相同的方法名稱、參數(shù)和返回值類型。重寫方法不能使用比被重寫方法更嚴格的訪問權(quán)限。 例:TestOverride.java思考:覆蓋和重載的區(qū)別3.9方法的覆蓋(override)38計算機科學與技術(shù)系在子類中可以根據(jù)需要對從父類中繼承來的方法進行重寫。重寫方法必須和被重寫方法具有相同的方法名稱、參數(shù)和返回值類型。重寫方法不能使用比被重寫方法更嚴格的訪問權(quán)限。例:TestOverride.java注意:重寫和重載的區(qū)別3.9方法的重寫(override)class Person int id; int age = 20; public int getAge() return age; publ

31、ic void setAge(int i) age = i; public int getId() return id; public String getInfo() return ID: + id + AGE: + age; class Student extends Person private String school; public String getSchool() return school; public void setSchool(String n) school = n; public String getInfo() return ID: + id + AGE: +

32、 age + SCHOOL: + school; 39計算機科學與技術(shù)系在子類中可以根據(jù)需要對從父類中繼承來的方法進行重寫。重寫方法必須和被重寫方法具有相同的方法名稱、參數(shù)3.9方法的重寫(override)/TestOverride.javapublic class TestOverride public static void main(String args) Person p1 = new Person(); Student st1 = new Student(); st1.setAge(22); st1.setSchool(ycu); System.out.println( p1.g

33、etInfo() ); System.out.println( st1.getInfo() ); 40計算機科學與技術(shù)系概念:是指在執(zhí)行期間(而非編譯期間)判斷所引用對象的實際類型,根據(jù)其實際的類型調(diào)用其方法。例:TestEqualsPolymoph.java3.10多態(tài)41計算機科學與技術(shù)系public boolean equals(Objectobj)可以根據(jù)需要在用戶自定義類中重寫equals()方法。例:TestEquals.java3.12Object類-equals()class Animal public String name; Animal(String name) this

34、.name = name; public void enjoy() System.out.println(叫聲。); class Cat extends Animal public String eyesColor; Cat(String n, String c) super(n); eyesColor = c; public void enjoy() System.out.println(貓叫聲); class Dog extends Animal public String furColor; Dog(String n, String c) super(n); furColor = c;

35、public void enjoy() System.out.println(狗叫聲); 抽 象42計算機科學與技術(shù)系public boolean equals(Objectobj)可以根據(jù)需要在用戶自定義類中重寫equals()方法。例:TestEquals.java3.12Object類-equals()class Lady private String name; private Animal pet; Lady(String name, Animal pet) = name; this.pet = pet; public void myPetEnjoy() pet.

36、enjoy(); public class TestPolymoph public static void main(String args) Cat c = new Cat(cat_name, blue); Dog d = new Dog(dog_name, black); Lady l1 = new Lady(l1, c); Lady l2 = new Lady(l2, d); l1.myPetEnjoy(); l2.myPetEnjoy(); 43計算機科學與技術(shù)系對象狀態(tài)的確定(instanceOf)instanceof是Java的一個二元運算符,作用是測試它左邊的對象是否是它右邊的類

37、的實例,返回boolean類型的數(shù)據(jù)。 Dog和Cat都是Animal的子類public void method(Animal pet) if( pet instanceOf Dog ) /do something as a Dog else if( pet instanceOf Cat ) /do something as a Cat else /do something else3.10多態(tài)44計算機科學與技術(shù)系總結(jié):多態(tài)存在要有三個必要條件:3.10多態(tài)要有繼承要有覆蓋父類引用指向子類對象45計算機科學與技術(shù)系包的作用:便于管理大型軟件系統(tǒng)中數(shù)目眾多的類,便于類的復用;解決類的命名沖突問

38、題。指明該中定義的類所在的包。格式為:說明:package語句作為Java源文件中的第一條語句包對應于文件系統(tǒng)的目錄管理。在package語句中用”.”來指明包(目錄)的層次。如在程序第一行加上package語句,并且該文件已存儲在該目錄中,那么該文件就包含在該包中。package的命名全都是小寫的英文字母。3.11package和import語句package pkg1.pkg2.pkg3;46計算機科學與技術(shù)系為便于管理大型軟件系統(tǒng)中數(shù)目眾多的類,解決類的命名沖突問題,Java引入了包機制。package語句作為Java源文件中的第一條語句,指明該中定義的類所在的包。若缺省該語句,則指定為

39、缺省包。格式為:包對應于文件系統(tǒng)的目錄管理。在package語句中用”.”來指明包(目錄)的層次。例:package的命名全都是小寫的英文字母。3.6package和import語句package pkg1.pkg2.pkg3;package javacode.chap03;/bagX1.javapackage bag;public class X1 int x,y; public X1(int i,int j)x=i;y=j; System.out.println(“x=”+x+” ”+”y=”+y); public void show() System.out.println(“this

40、class is a x1”);/bagX1.javapackage bag;public class X2 int m,n; public X2(int i,int j)m=i;n=j; System.out.println(“m=”+m+” ”+”n=”+n); public void show() System.out.println(“this class is a x2”); 47計算機科學與技術(shù)系為便于管理大型軟件系統(tǒng)中數(shù)目眾多的類,解決類的命名沖突問題,Java引入了包機制。package語句作為Java源文件中的第一條語句,指明該中定義的類所在的包。若缺省該語句,則指定為缺省包

41、。格式為:包對應于文件系統(tǒng)的目錄管理。在package語句中用”.”來指明包(目錄)的層次。例:package的命名全都是小寫的英文字母。3.11package和import語句package pkg1.pkg2.pkg3;package javacode.chap03;/x.javaimport bag.*public class X public static void main(String args) x1 a1=new x1(1,2);a1.show(); x2 a2=new x2(3,4); a2.show(); 48計算機科學與技術(shù)系注意:增加了package語句的Java源文件

42、,在編譯后產(chǎn)生的class文件必須位于正確的目錄下面(即和它所在的包的層次完全一致)。想在另一個類中使用到這個包里的類方法:寫其全名。也可使用import語句,在文件的開頭引入要使用到的類。java.lang包中的類,可以不需import。3.11package和import語句49計算機科學與技術(shù)系包的引用: import 包名.說明: 訪問位于同一個包中的類不需引入import語句放在程序的開頭classpath的設(shè)定 將要編譯或執(zhí)行的程序時所需要的類文件(class文件)的最上層包的父目錄應設(shè)于環(huán)境變量classpath中。3.11package和import語句* /引入整個包 具體類

43、名 /只引入包中的某個類50計算機科學與技術(shù)系J2SDK中主要的包介紹3.11package和import語句java.lang: 包含一些Java語言的核心類,如String、Math、Integer、System等,提供常用功能。java.awt:包含了構(gòu)成抽象窗口工具集的多個類,這些類被用來構(gòu)建和管理應用程序的圖形用戶界面(GUI)。java.applet:包含applet運行所需的一些類。:包含執(zhí)行與網(wǎng)絡(luò)相關(guān)的操作的類。java.io:包含能提供多種輸入/輸出功能的類。java.util:包含一些實用工具類,如定義系統(tǒng)特性、使用與日期日歷相關(guān)的函數(shù)。jar cvf pkg_name.j

44、ar 包名jar tvf pkg_name.jar51計算機科學與技術(shù)系final可用來修飾變量、方法和類。final的屬性或變量,即是一個常量。final的方法不能被重寫。final的類不能被繼承。例:TestFinal.java3.12final關(guān)鍵字final的成員變量:只能被初始化一次(定義時或在構(gòu)造方法中進行)final的局部變量:代表的是一個常量52計算機科學與技術(shù)系final可用來修飾變量、方法和類。final的變量不能被改變。final的方法不能被重寫。final的類不能被繼承。例:TestFinal.java3.14final關(guān)鍵字abstract class abstrac

45、tClass abstract returntype abstractMethod(paramlist)fFinal的成員變量final的局部變量final class T final int i = 8; public final void m() /i = 9; /class TT extends T /public class TestFinal public static void main(String args) T t = new T(); /t.i = 8; 53計算機科學與技術(shù)系J2SDK中提供有許多final類,例String、Math、Boolean等。(參看API文檔)

46、如果自己的類不想被別人繼承,可用final修飾。3.12final關(guān)鍵字54計算機科學與技術(shù)系用abstract關(guān)鍵字修飾的類,即抽象類。作用:描述概念性的內(nèi)容,這樣可以提高開發(fā)效率,更好地統(tǒng)一用戶“接口”。語法格式:抽象類必須被繼承,抽象方法必須被重寫。抽象類不能被實例化;抽象方法只需聲明,無需實現(xiàn)。抽象類通常包括一個或多個抽象方法,但不是一定包括若類中包含了抽象方法,則該類必須被定義為抽象類。3.13抽象類和抽象方法abstract class 抽象類名 abstract 返回類型 抽象方法(參數(shù)表);多態(tài)55計算機科學與技術(shù)系注:3.13抽象類和抽象方法雖然抽象類不能產(chǎn)生實例對象,但還是

47、需要構(gòu)造方法的存在!abstract關(guān)鍵字只能用在類和方法上,而不能用在屬性和一般的變量上。56計算機科學與技術(shù)系是抽象方法和常量的定義的集合。從本質(zhì)上講,接口是一種特殊的抽象類,這種抽象類中只包含常量和方法的定義,而沒有變量和方法的實現(xiàn)。接口的定義格式:3.14接口-interfacepublic interface 接口名 extends 父接口名列表 type NAME = value; /該常量被實現(xiàn)該接口的多個類共享; /缺省的具有public, final, static的屬性 returntype methodName(paramlist); /缺省的具有 public和abst

48、ract屬性57計算機科學與技術(shù)系例:3.14接口public interface Runner public static final int ID = 1; public void run();可寫成:public interface Runner int ID = 1; void run();58計算機科學與技術(shù)系特性:3.14接口接口中聲明的成員變量默認為public static final的,且也只能是public static final的;接口中只能定義為抽象方法,而且這些方法默認為public的,且也只能為public的接口可以繼承其它接口,并添加新的屬性和抽象方法。接口可以

49、實現(xiàn)多繼承。public interface 接口名 extends 父接口名列表 即一個接口可有多個父接口(即接口可實現(xiàn)多繼承),用逗號隔開59計算機科學與技術(shù)系在類的聲明中用implements子句來表示一個類使用某個接口。多個無關(guān)的類可以實現(xiàn)同一個接口。一個類可以實現(xiàn)多個無關(guān)的接口。定義Java類的語法格式:在類體中可以使用接口中定義的常量,而且必須實現(xiàn)接口中定義的所有方法。3.14接口 類名 extends implements , 60計算機科學與技術(shù)系多個無關(guān)的類可以實現(xiàn)同一個接口。一個類可以實現(xiàn)多個無關(guān)的接口。與繼承關(guān)系類似,接口與實現(xiàn)類之間存在多態(tài)性。定義Java類的語法格式:

50、3.15接口 class name extends implements , * *interface Singer public void sing(); interface Painter public void paint(); class Student implements Singer private String name; Student(String name) = name; public void study() System.out.println(studying.); public String getName() return name; pu

51、blic void sing() System.out.println(Student is singing.); 61計算機科學與技術(shù)系多個無關(guān)的類可以實現(xiàn)同一個接口。一個類可以實現(xiàn)多個無關(guān)的接口。與繼承關(guān)系類似,接口與實現(xiàn)類之間存在多態(tài)性。定義Java類的語法格式:3.15接口 class name extends implements , * *class Teacher implements Singer, Painter private String name; Teacher(String name) = name; public String getName(

52、) return name; public void teach() System.out.println(teaching.); public void sing() System.out.println(Teacher is singing.); public void paint() System.out.println(Teacher is painting.); 62計算機科學與技術(shù)系多個無關(guān)的類可以實現(xiàn)同一個接口。一個類可以實現(xiàn)多個無關(guān)的接口。與繼承關(guān)系類似,接口與實現(xiàn)類之間存在多態(tài)性。定義Java類的語法格式:3.15接口public class TestInterface pu

53、blic static void main(String args) Singer s1 = new Student(Helen); s1.sing(); Singer s2 = new Teacher(John); s2.sing(); Painter p1 = (Painter)s2; p1.paint(); 63接口作為一種引用類型來使用。任何實現(xiàn)該接口的類的實例都可以存儲在該接口類型的變量中。通過這些變量可以訪問類所實現(xiàn)的接口中的方法。計算機科學與技術(shù)系3.14接口64內(nèi)部類內(nèi)部類:在一個類的內(nèi)部嵌套定義類。Inner Class 一般用來生成事件適配器,用于事件處理。3.15 內(nèi)部類

54、 Inner Class是其它類的成員在一個語句塊的內(nèi)部定義在表達式內(nèi)部匿名定義 計算機科學與技術(shù)系65內(nèi)部類的定義和實現(xiàn)示例:TwoListenInner.java文件是一個說明內(nèi)部類如何使用的例子其中,定義了兩個內(nèi)部類:MouseMotionHandler和MouseEventHandler,分別用來處理鼠標移動事件和鼠標點按事件。計算機科學與技術(shù)系3.15 內(nèi)部類 Inner Classclass OutClass private int generalInt; void generalMethod()InnerClass inn=new InnerClass();inn.innerIn

55、t=1; class InnerClass private int innerInt; void print()System.out.println(generalInt=+ generalInt); public class GeneralClasspublic static void main(String args) OutClass out = new OutClass();OutClass.InnerClass inn1 = out.new InnerClass (); inn1.print();66內(nèi)部類直接訪問外部類的成員和方法外部類如同使用其它類一樣使用自己的內(nèi)部類內(nèi)部類可以被

56、更多的訪問控制符修飾: private:只有外層類可以使用 protected:只有外層類、與外層類處于同一個包的類、外層類的子類可以訪問 static:內(nèi)部類中只能訪問外部類中的static成員除外層類其他類使用內(nèi)部類需要以下代碼形式: OutClass out = new OutClass();OutClass.InnerClass inn1 = out.new InnerClass ();內(nèi)部類可以實現(xiàn)接口及抽象類的抽象方法3.3 內(nèi)部類 Inner Class67匿名類Anonymous Class是一種特殊的內(nèi)部類,是在一個表達式內(nèi)部包含一個完整的類定義(類的定義和一個實例的創(chuàng)建同時進行)。例如:3.15 內(nèi)部類 Inner Classpublic class GeneralClasspublic static void main(String args) TestInterface testInterface=new TestInterface()public

溫馨提示

  • 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

提交評論