




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、Java面向?qū)ο蟪绦蛟O(shè)計(jì)1主要內(nèi)容面向?qū)ο蟮脑O(shè)計(jì)思想Java類的定義構(gòu)造方法對(duì)象的創(chuàng)建和使用static關(guān)鍵字類的繼承this、super關(guān)鍵字計(jì)算機(jī)科學(xué)與技術(shù)系方法的重載和覆蓋package和import語(yǔ)句final關(guān)鍵字抽象類和接口2面向?qū)ο蠹夹g(shù)基礎(chǔ)1. 面向?qū)ο蟮幕舅枷朊嫦驅(qū)ο笫且环N程序設(shè)計(jì)方法?;舅枷耄菏褂脤?duì)象、類、繼承、封裝、消息等基本概念來(lái)進(jìn)行程序設(shè)計(jì)。優(yōu)點(diǎn):符合人們?nèi)粘W匀坏乃季S習(xí)慣(因?yàn)樗菑默F(xiàn)實(shí)世界中客觀存在的事物(即對(duì)象)出發(fā)來(lái)構(gòu)造軟件系統(tǒng),并且在系統(tǒng)構(gòu)造中盡可能運(yùn)用人類的自然思維方式)。降低、分解問(wèn)題的難度和復(fù)雜性,提高整個(gè)求解過(guò)程的可控制性、可監(jiān)視性、可擴(kuò)充性和可
2、維護(hù)性計(jì)算機(jī)科學(xué)與技術(shù)系3面向?qū)ο蠹夹g(shù)基礎(chǔ)2. 面向?qū)ο蟮脑O(shè)計(jì)思想分析問(wèn)題時(shí),不再分解其每一個(gè)過(guò)程。而是首先要考慮的是該問(wèn)題域中涉及到哪些類(對(duì)象)這些類(對(duì)象)各有哪些屬性和方法;這些類(對(duì)象)之間的關(guān)系如何。計(jì)算機(jī)科學(xué)與技術(shù)系4面向?qū)ο蠹夹g(shù)基礎(chǔ)3. 類與對(duì)象之間的關(guān)系對(duì)象是表示現(xiàn)實(shí)世界中某個(gè)具體的事物;類是對(duì)對(duì)象的抽象描述。張三 類(CLASS) 如: “man class ”對(duì)對(duì)象進(jìn)行抽象為類對(duì)類進(jìn)行實(shí)例化5面向?qū)ο蠹夹g(shù)基礎(chǔ)4. 面向?qū)ο蟮幕咎卣鞣庋b性:就是把對(duì)象的屬性和服務(wù)結(jié)合成一個(gè)獨(dú)立的相同單位,并盡可能隱蔽對(duì)象的內(nèi)部細(xì)節(jié)。其兩個(gè)主要目的:一是保護(hù)類中的數(shù)據(jù),二是隱藏細(xì)節(jié)。繼承性:
3、主要目的是為了“擴(kuò)展”原本類的功能,加強(qiáng)或改進(jìn)原本類所沒(méi)有定義的屬性及方法。父類和子類多態(tài)性:一個(gè)消息被不同的類型的對(duì)象或相同類型的對(duì)象接收時(shí)產(chǎn)生不同的行為。計(jì)算機(jī)科學(xué)與技術(shù)系6計(jì)算機(jī)科學(xué)與技術(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計(jì)算機(jī)科學(xué)與技術(shù)系Java權(quán)限修飾符private、protected、public置于類的成員定義之前,用來(lái)限定其他對(duì)象對(duì)該對(duì)象成員的訪問(wèn)權(quán)限。缺省為包級(jí)權(quán)限3.1Java類的定義8計(jì)算機(jī)科學(xué)與技術(shù)系修飾符使用說(shuō)明:3.1Java類的定義只有公用的程序中的某些方法,才會(huì)使用public修飾符。某個(gè)成員對(duì)于大部分程序來(lái)說(shuō)不太會(huì)使用到,但是對(duì)于別的package中繼承的子類中會(huì)使用到,則使用protected修飾符。如果只想讓同package中的類使用的方法或是屬性,則使用(default)修
5、飾符。對(duì)于只是自己類內(nèi)部所使用的屬性或方法,則使用private修飾符來(lái)隱藏它們。如果你不確定該用何種修飾符,最好設(shè)定為(default)9計(jì)算機(jī)科學(xué)與技術(shù)系對(duì)于class的權(quán)限修飾符只可以用public和default。3.1Java類的定義public類,可以在任意地方被訪問(wèn)。default類,只可以被同一個(gè)包內(nèi)的類訪問(wèn)。10計(jì)算機(jī)科學(xué)與技術(shù)系必須使用new關(guān)鍵字創(chuàng)建對(duì)象。 例:使用 對(duì)象(引用).成員變量 來(lái)引用對(duì)象的成員變量。 例:使用 對(duì)象(引用).方法(參數(shù)列表) 來(lái)調(diào)用對(duì)象的方法 例:同一個(gè)類的每個(gè)對(duì)象有不同的成員變量存儲(chǔ)空間。同一個(gè)類的每個(gè)對(duì)象共享此類的方法。3.2對(duì)象的創(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計(jì)算機(jī)科學(xué)與技術(shù)系必須使用new關(guān)鍵字創(chuàng)建對(duì)象。 例:使用 對(duì)象(引用).成員變量 來(lái)引用對(duì)象的成員變量。 例:使用 對(duì)象(引用).方法(參數(shù)列表) 來(lái)調(diào)用對(duì)象的方法 例:同一個(gè)類的每個(gè)對(duì)象有不同的成員變量存儲(chǔ)空間。同一個(gè)類的每個(gè)對(duì)象共享此類的方法。3.2對(duì)象的創(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計(jì)算機(jī)科學(xué)與技術(shù)系是定義在Java類中的一個(gè)用來(lái)初始化對(duì)象的方法。Java中的每個(gè)類都有構(gòu)造方法,用來(lái)初始化該類的一個(gè)對(duì)象。構(gòu)造方法的語(yǔ)法格式為:例: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計(jì)算機(jī)科學(xué)與技術(shù)系創(chuàng)建對(duì)象時(shí),使用構(gòu)造方法初始化對(duì)象
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計(jì)算機(jī)科學(xué)與技術(shù)系構(gòu)造方法特點(diǎn):3.3構(gòu)造方法構(gòu)造方法沒(méi)有返回值,也不需要指定為void。構(gòu)造方法的名稱一定和類名稱一樣。構(gòu)造方法只能由new運(yùn)算符調(diào)用。當(dāng)沒(méi)有指定構(gòu)造方法時(shí),編譯器會(huì)為類自動(dòng)添加形如 類名() 的構(gòu)造方法,成員變量的取值為各種類型的默認(rèn)值當(dāng)我們自行編寫一個(gè)構(gòu)造方法之后,Java在編譯時(shí)就不再會(huì)幫加上前面提到的那個(gè)默認(rèn)的無(wú)參構(gòu)造方法。使用不同數(shù)量、不同類型的參數(shù)對(duì)類初始化會(huì)擁有多個(gè)構(gòu)造方法15計(jì)算機(jī)科學(xué)與技術(shù)系用static關(guān)鍵字可以聲明類變量(靜態(tài)變量)和類方法(靜態(tài)方法)。類變量為該類的所有對(duì)象共享。類變量可通過(guò)類名直接訪問(wèn),也可以
11、通過(guò)該類的對(duì)象訪問(wèn)。類變量在定義時(shí)必須進(jìn)行初始化。類變量在類加載時(shí),就分配了內(nèi)存空間。例:TestStatic.java3.4static關(guān)鍵字16計(jì)算機(jī)科學(xué)與技術(shù)系用static關(guān)鍵字可以聲明靜態(tài)變量(類變量)和靜態(tài)方法(類方法)。靜態(tài)變量?jī)H在生成第一個(gè)對(duì)象時(shí)分配內(nèi)存。類的靜態(tài)變量為該類的所有對(duì)象共享。靜態(tài)變量可通過(guò)類名直接訪問(wèn),也可以通過(guò)該類的對(duì)象訪問(wèn)。static方法中不可訪問(wèn)非static的成員。3.4static關(guān)鍵字/TestStatic.javaclass Cat static int sid = 0; /sid為靜態(tài)變量,用于計(jì)數(shù) String name; int id; /i
12、d為成員變量,表示編號(hào) Cat(String name) id = +sid; = name; public void Info() System.out.println(My name is + name + and No. is + id); 17計(jì)算機(jī)科學(xué)與技術(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計(jì)算機(jī)科學(xué)與技術(shù)系思考分析:如果將程序中的 static int sid = 0; 改為 int sid = 0; 編譯執(zhí)行時(shí)將會(huì)出現(xiàn)什么情況?注意:static方法中不可訪問(wèn)非static的成員。3.4static關(guān)鍵字19計(jì)算機(jī)科學(xué)與技術(shù)系Java中使用extends關(guān)鍵字實(shí)現(xiàn)類的繼承機(jī)制。語(yǔ)法規(guī)則:Java只支持單繼承,不允許多繼承。注意:修飾符為private的屬性和方法不會(huì)被繼承。注意:構(gòu)造方法也不會(huì)被繼承。根類:java.lang.Object類3.5類的繼承
14、修飾符 class 子類名 extends 父類名 /Fish.javapublic class Fish extends Animal public Fish() 20計(jì)算機(jī)科學(xué)與技術(shù)系Java中使用extends關(guān)鍵字實(shí)現(xiàn)類的繼承機(jī)制。語(yǔ)法規(guī)則:Java只支持單繼承,不允許多繼承。通過(guò)繼承,子類自動(dòng)擁有父類的除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計(jì)算機(jī)科學(xué)與技術(shù)系Java中使用extends關(guān)鍵字實(shí)現(xiàn)類的繼承機(jī)制。語(yǔ)法規(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計(jì)算機(jī)科學(xué)與技術(shù)系在類的方法定義中使用的this關(guān)鍵字代表使用該方法的對(duì)象的引用。當(dāng)必須指出當(dāng)前使用方法的對(duì)象是誰(shuí)時(shí)要用this。有時(shí)使用this可以處理成員變量和和重名的情況。this可以看作是一個(gè)變量,它的值是當(dāng)前對(duì)象的引用例: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指該對(duì)象本身 TestThis increament() i+; return this; /this指調(diào)用該方法的對(duì)象 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計(jì)算機(jī)科學(xué)與技術(shù)系Java中使用super關(guān)鍵字來(lái)引用父類的成員。例:TestSuper.java3.6this、super關(guān)鍵字25計(jì)算機(jī)科學(xué)與技術(shù)系Java中使用super關(guān)鍵字來(lái)引用父類的成員。例: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計(jì)算機(jī)科學(xué)與技術(shù)系super()是調(diào)用父類的構(gòu)造方法;它只能使用在構(gòu)造方法中的第一行,且必須放在第一行。例: class A public A(int i) class B extends A public B() super(0); .注意:Super()和this( )同時(shí)只能使用一種。3.6this、super關(guān)鍵字28計(jì)算機(jī)科學(xué)與技術(shù)系子類的構(gòu)造過(guò)程中必須調(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)造方法中沒(méi)有顯式地調(diào)用父類的構(gòu)造方法,則系統(tǒng)默認(rèn)先調(diào)用父類無(wú)參的構(gòu)造方法。如果子類構(gòu)造方法中既沒(méi)顯式調(diào)用父類構(gòu)造方法,而父類中又沒(méi)有無(wú)參的構(gòu)造方法,則編譯出錯(cuò)。 例:TestSuperSub.java3.7繼承中的構(gòu)造方法29計(jì)算機(jī)科學(xué)與技術(shù)系子類的構(gòu)造過(guò)程中必須調(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計(jì)算機(jī)科學(xué)與技術(shù)系子類的構(gòu)造過(guò)程中必須調(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計(jì)算機(jī)科學(xué)與技術(shù)系練習(xí):3.7繼承中的構(gòu)造方法分析下列程序的輸出結(jié)果,體會(huì)構(gòu)造方法和一般成員方法在繼承中的區(qū)別。32計(jì)算機(jī)科學(xué)與技術(shù)系練習(xí):3.11繼承中的構(gòu)造方法分析下列程序的輸出結(jié)果,體會(huì)構(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計(jì)算機(jī)科學(xué)與技術(shù)系是指一個(gè)類中可以定義有相同的名字、但參數(shù)個(gè)數(shù)或類型不同的多個(gè)方法。調(diào)用時(shí),編譯器會(huì)根據(jù)不同的參數(shù)表選擇對(duì)應(yīng)的方法。例如: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計(jì)算機(jī)科學(xué)與技術(shù)系方法重載時(shí)需要遵守的規(guī)則:3.8方法的重載多個(gè)方法享有相同的名字。區(qū)別在于:是參數(shù)的個(gè)數(shù)或者是參數(shù)類型不同。參數(shù)類型的區(qū)分度一定要足夠,例如不能是同一簡(jiǎn)單類型的參數(shù),如int與long。返回類型不能用來(lái)區(qū)分重載的方法。構(gòu)造方法與普通方法一樣,也可以重載。35計(jì)算機(jī)科學(xué)與技術(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計(jì)算機(jī)科學(xué)與技術(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計(jì)算機(jī)科學(xué)與技術(shù)系覆蓋:在子類中根據(jù)需要對(duì)從父類中繼承來(lái)的方法進(jìn)行重寫。注意:重寫方法必須和被重寫方法具
30、有相同的方法名稱、參數(shù)和返回值類型。重寫方法不能使用比被重寫方法更嚴(yán)格的訪問(wèn)權(quán)限。 例:TestOverride.java思考:覆蓋和重載的區(qū)別3.9方法的覆蓋(override)38計(jì)算機(jī)科學(xué)與技術(shù)系在子類中可以根據(jù)需要對(duì)從父類中繼承來(lái)的方法進(jìn)行重寫。重寫方法必須和被重寫方法具有相同的方法名稱、參數(shù)和返回值類型。重寫方法不能使用比被重寫方法更嚴(yán)格的訪問(wèn)權(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計(jì)算機(jī)科學(xué)與技術(shù)系在子類中可以根據(jù)需要對(duì)從父類中繼承來(lái)的方法進(jìn)行重寫。重寫方法必須和被重寫方法具有相同的方法名稱、參數(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計(jì)算機(jī)科學(xué)與技術(shù)系概念:是指在執(zhí)行期間(而非編譯期間)判斷所引用對(duì)象的實(shí)際類型,根據(jù)其實(shí)際的類型調(diào)用其方法。例:TestEqualsPolymoph.java3.10多態(tài)41計(jì)算機(jī)科學(xué)與技術(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計(jì)算機(jī)科學(xué)與技術(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計(jì)算機(jī)科學(xué)與技術(shù)系對(duì)象狀態(tài)的確定(instanceOf)instanceof是Java的一個(gè)二元運(yùn)算符,作用是測(cè)試它左邊的對(duì)象是否是它右邊的類
37、的實(shí)例,返回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計(jì)算機(jī)科學(xué)與技術(shù)系總結(jié):多態(tài)存在要有三個(gè)必要條件:3.10多態(tài)要有繼承要有覆蓋父類引用指向子類對(duì)象45計(jì)算機(jī)科學(xué)與技術(shù)系包的作用:便于管理大型軟件系統(tǒng)中數(shù)目眾多的類,便于類的復(fù)用;解決類的命名沖突問(wèn)
38、題。指明該中定義的類所在的包。格式為:說(shuō)明:package語(yǔ)句作為Java源文件中的第一條語(yǔ)句包對(duì)應(yīng)于文件系統(tǒng)的目錄管理。在package語(yǔ)句中用”.”來(lái)指明包(目錄)的層次。如在程序第一行加上package語(yǔ)句,并且該文件已存儲(chǔ)在該目錄中,那么該文件就包含在該包中。package的命名全都是小寫的英文字母。3.11package和import語(yǔ)句package pkg1.pkg2.pkg3;46計(jì)算機(jī)科學(xué)與技術(shù)系為便于管理大型軟件系統(tǒng)中數(shù)目眾多的類,解決類的命名沖突問(wèn)題,Java引入了包機(jī)制。package語(yǔ)句作為Java源文件中的第一條語(yǔ)句,指明該中定義的類所在的包。若缺省該語(yǔ)句,則指定為
39、缺省包。格式為:包對(duì)應(yīng)于文件系統(tǒng)的目錄管理。在package語(yǔ)句中用”.”來(lái)指明包(目錄)的層次。例:package的命名全都是小寫的英文字母。3.6package和import語(yǔ)句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計(jì)算機(jī)科學(xué)與技術(shù)系為便于管理大型軟件系統(tǒng)中數(shù)目眾多的類,解決類的命名沖突問(wèn)題,Java引入了包機(jī)制。package語(yǔ)句作為Java源文件中的第一條語(yǔ)句,指明該中定義的類所在的包。若缺省該語(yǔ)句,則指定為缺省包
41、。格式為:包對(duì)應(yīng)于文件系統(tǒng)的目錄管理。在package語(yǔ)句中用”.”來(lái)指明包(目錄)的層次。例:package的命名全都是小寫的英文字母。3.11package和import語(yǔ)句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計(jì)算機(jī)科學(xué)與技術(shù)系注意:增加了package語(yǔ)句的Java源文件
42、,在編譯后產(chǎn)生的class文件必須位于正確的目錄下面(即和它所在的包的層次完全一致)。想在另一個(gè)類中使用到這個(gè)包里的類方法:寫其全名。也可使用import語(yǔ)句,在文件的開頭引入要使用到的類。java.lang包中的類,可以不需import。3.11package和import語(yǔ)句49計(jì)算機(jī)科學(xué)與技術(shù)系包的引用: import 包名.說(shuō)明: 訪問(wèn)位于同一個(gè)包中的類不需引入import語(yǔ)句放在程序的開頭classpath的設(shè)定 將要編譯或執(zhí)行的程序時(shí)所需要的類文件(class文件)的最上層包的父目錄應(yīng)設(shè)于環(huán)境變量classpath中。3.11package和import語(yǔ)句* /引入整個(gè)包 具體類
43、名 /只引入包中的某個(gè)類50計(jì)算機(jī)科學(xué)與技術(shù)系J2SDK中主要的包介紹3.11package和import語(yǔ)句java.lang: 包含一些Java語(yǔ)言的核心類,如String、Math、Integer、System等,提供常用功能。java.awt:包含了構(gòu)成抽象窗口工具集的多個(gè)類,這些類被用來(lái)構(gòu)建和管理應(yīng)用程序的圖形用戶界面(GUI)。java.applet:包含applet運(yùn)行所需的一些類。:包含執(zhí)行與網(wǎng)絡(luò)相關(guān)的操作的類。java.io:包含能提供多種輸入/輸出功能的類。java.util:包含一些實(shí)用工具類,如定義系統(tǒng)特性、使用與日期日歷相關(guān)的函數(shù)。jar cvf pkg_name.j
44、ar 包名jar tvf pkg_name.jar51計(jì)算機(jī)科學(xué)與技術(shù)系final可用來(lái)修飾變量、方法和類。final的屬性或變量,即是一個(gè)常量。final的方法不能被重寫。final的類不能被繼承。例:TestFinal.java3.12final關(guān)鍵字final的成員變量:只能被初始化一次(定義時(shí)或在構(gòu)造方法中進(jìn)行)final的局部變量:代表的是一個(gè)常量52計(jì)算機(jī)科學(xué)與技術(shù)系final可用來(lái)修飾變量、方法和類。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計(jì)算機(jī)科學(xué)與技術(shù)系J2SDK中提供有許多final類,例String、Math、Boolean等。(參看API文檔)
46、如果自己的類不想被別人繼承,可用final修飾。3.12final關(guān)鍵字54計(jì)算機(jī)科學(xué)與技術(shù)系用abstract關(guān)鍵字修飾的類,即抽象類。作用:描述概念性的內(nèi)容,這樣可以提高開發(fā)效率,更好地統(tǒng)一用戶“接口”。語(yǔ)法格式:抽象類必須被繼承,抽象方法必須被重寫。抽象類不能被實(shí)例化;抽象方法只需聲明,無(wú)需實(shí)現(xiàn)。抽象類通常包括一個(gè)或多個(gè)抽象方法,但不是一定包括若類中包含了抽象方法,則該類必須被定義為抽象類。3.13抽象類和抽象方法abstract class 抽象類名 abstract 返回類型 抽象方法(參數(shù)表);多態(tài)55計(jì)算機(jī)科學(xué)與技術(shù)系注:3.13抽象類和抽象方法雖然抽象類不能產(chǎn)生實(shí)例對(duì)象,但還是
47、需要構(gòu)造方法的存在!abstract關(guān)鍵字只能用在類和方法上,而不能用在屬性和一般的變量上。56計(jì)算機(jī)科學(xué)與技術(shù)系是抽象方法和常量的定義的集合。從本質(zhì)上講,接口是一種特殊的抽象類,這種抽象類中只包含常量和方法的定義,而沒(méi)有變量和方法的實(shí)現(xiàn)。接口的定義格式:3.14接口-interfacepublic interface 接口名 extends 父接口名列表 type NAME = value; /該常量被實(shí)現(xiàn)該接口的多個(gè)類共享; /缺省的具有public, final, static的屬性 returntype methodName(paramlist); /缺省的具有 public和abst
48、ract屬性57計(jì)算機(jī)科學(xué)與技術(shù)系例:3.14接口public interface Runner public static final int ID = 1; public void run();可寫成:public interface Runner int ID = 1; void run();58計(jì)算機(jī)科學(xué)與技術(shù)系特性:3.14接口接口中聲明的成員變量默認(rèn)為public static final的,且也只能是public static final的;接口中只能定義為抽象方法,而且這些方法默認(rèn)為public的,且也只能為public的接口可以繼承其它接口,并添加新的屬性和抽象方法。接口可以
49、實(shí)現(xiàn)多繼承。public interface 接口名 extends 父接口名列表 即一個(gè)接口可有多個(gè)父接口(即接口可實(shí)現(xiàn)多繼承),用逗號(hào)隔開59計(jì)算機(jī)科學(xué)與技術(shù)系在類的聲明中用implements子句來(lái)表示一個(gè)類使用某個(gè)接口。多個(gè)無(wú)關(guān)的類可以實(shí)現(xiàn)同一個(gè)接口。一個(gè)類可以實(shí)現(xiàn)多個(gè)無(wú)關(guān)的接口。定義Java類的語(yǔ)法格式:在類體中可以使用接口中定義的常量,而且必須實(shí)現(xiàn)接口中定義的所有方法。3.14接口 類名 extends implements , 60計(jì)算機(jī)科學(xué)與技術(shù)系多個(gè)無(wú)關(guān)的類可以實(shí)現(xiàn)同一個(gè)接口。一個(gè)類可以實(shí)現(xiàn)多個(gè)無(wú)關(guān)的接口。與繼承關(guān)系類似,接口與實(shí)現(xiàn)類之間存在多態(tài)性。定義Java類的語(yǔ)法格式:
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計(jì)算機(jī)科學(xué)與技術(shù)系多個(gè)無(wú)關(guān)的類可以實(shí)現(xiàn)同一個(gè)接口。一個(gè)類可以實(shí)現(xiàn)多個(gè)無(wú)關(guān)的接口。與繼承關(guān)系類似,接口與實(shí)現(xiàn)類之間存在多態(tài)性。定義Java類的語(yǔ)法格式: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計(jì)算機(jī)科學(xué)與技術(shù)系多個(gè)無(wú)關(guān)的類可以實(shí)現(xiàn)同一個(gè)接口。一個(gè)類可以實(shí)現(xiàn)多個(gè)無(wú)關(guān)的接口。與繼承關(guān)系類似,接口與實(shí)現(xiàn)類之間存在多態(tài)性。定義Java類的語(yǔ)法格式: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接口作為一種引用類型來(lái)使用。任何實(shí)現(xiàn)該接口的類的實(shí)例都可以存儲(chǔ)在該接口類型的變量中。通過(guò)這些變量可以訪問(wèn)類所實(shí)現(xiàn)的接口中的方法。計(jì)算機(jī)科學(xué)與技術(shù)系3.14接口64內(nèi)部類內(nèi)部類:在一個(gè)類的內(nèi)部嵌套定義類。Inner Class 一般用來(lái)生成事件適配器,用于事件處理。3.15 內(nèi)部類
54、 Inner Class是其它類的成員在一個(gè)語(yǔ)句塊的內(nèi)部定義在表達(dá)式內(nèi)部匿名定義 計(jì)算機(jī)科學(xué)與技術(shù)系65內(nèi)部類的定義和實(shí)現(xiàn)示例:TwoListenInner.java文件是一個(gè)說(shuō)明內(nèi)部類如何使用的例子其中,定義了兩個(gè)內(nèi)部類:MouseMotionHandler和MouseEventHandler,分別用來(lái)處理鼠標(biāo)移動(dòng)事件和鼠標(biāo)點(diǎn)按事件。計(jì)算機(jī)科學(xué)與技術(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)部類直接訪問(wèn)外部類的成員和方法外部類如同使用其它類一樣使用自己的內(nèi)部類內(nèi)部類可以被
56、更多的訪問(wèn)控制符修飾: private:只有外層類可以使用 protected:只有外層類、與外層類處于同一個(gè)包的類、外層類的子類可以訪問(wèn) static:內(nèi)部類中只能訪問(wèn)外部類中的static成員除外層類其他類使用內(nèi)部類需要以下代碼形式: OutClass out = new OutClass();OutClass.InnerClass inn1 = out.new InnerClass ();內(nèi)部類可以實(shí)現(xiàn)接口及抽象類的抽象方法3.3 內(nèi)部類 Inner Class67匿名類Anonymous Class是一種特殊的內(nèi)部類,是在一個(gè)表達(dá)式內(nèi)部包含一個(gè)完整的類定義(類的定義和一個(gè)實(shí)例的創(chuàng)建同時(shí)進(jìn)行)。例如:3.15 內(nèi)部類 Inner Classpublic class GeneralClasspublic static void main(String args) TestInterface testInterface=new TestInterface()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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- GB/T 45210-2025增材制造標(biāo)準(zhǔn)測(cè)試件增材制造系統(tǒng)幾何成形能力評(píng)估
- 離婚協(xié)議與財(cái)產(chǎn)分割合同范本
- 地鐵建設(shè)項(xiàng)目施工及設(shè)備安裝合同
- 新車購(gòu)銷合同書
- 施工合同安全責(zé)任書:版
- 客戶預(yù)收款退款合同擔(dān)保
- 4感官幫助我 教學(xué)設(shè)計(jì)-2024-2025學(xué)年科學(xué)一年級(jí)上冊(cè)冀人版
- 人力資源服務(wù)合同(二)
- 7 不甘屈辱奮勇抗?fàn)?第一課時(shí) 教學(xué)設(shè)計(jì)-2023-2024學(xué)年道德與法治五年級(jí)下冊(cè)統(tǒng)編版
- 度員工派遣合同范本
- 體驗(yàn)店FM述職報(bào)告
- 永州職業(yè)技術(shù)學(xué)院?jiǎn)握新殬I(yè)技能測(cè)試參考試題庫(kù)(含答案)
- 教科版六年級(jí)下冊(cè)科學(xué)第三單元《宇宙》教材分析及全部教案(定稿;共7課時(shí))
- 中國(guó)胎兒心臟超聲檢查指南
- 學(xué)校教育中的品牌塑造與校園文化建設(shè)培訓(xùn)課件
- 濟(jì)南廣播電視臺(tái)面向社會(huì)招聘工作人員筆試參考題庫(kù)(共500題)答案詳解版
- 【公司會(huì)計(jì)信息化建設(shè)研究文獻(xiàn)綜述2000字】
- 滄州師范學(xué)院學(xué)士學(xué)位論文寫作指南2020版
- 【高中語(yǔ)文】《中國(guó)人民站起來(lái)了》課件40張+統(tǒng)編版高中語(yǔ)文選擇性必修上冊(cè)
- 手機(jī)歸屬地表格
- 項(xiàng)目團(tuán)隊(duì)管理課件
評(píng)論
0/150
提交評(píng)論