版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(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類(lèi)的定義構(gòu)造方法對(duì)象的創(chuàng)建和使用static關(guān)鍵字類(lèi)的繼承this、super關(guān)鍵字計(jì)算機(jī)科學(xué)與技術(shù)系方法的重載和覆蓋package和import語(yǔ)句final關(guān)鍵字抽象類(lèi)和接口2面向?qū)ο蠹夹g(shù)基礎(chǔ)1. 面向?qū)ο蟮幕舅枷朊嫦驅(qū)ο笫且环N程序設(shè)計(jì)方法?;舅枷耄菏褂脤?duì)象、類(lèi)、繼承、封裝、消息等基本概念來(lái)進(jìn)行程序設(shè)計(jì)。優(yōu)點(diǎn):符合人們?nèi)粘W匀坏乃季S習(xí)慣(因?yàn)樗菑默F(xiàn)實(shí)世界中客觀(guān)存在的事物(即對(duì)象)出發(fā)來(lái)構(gòu)造軟件系統(tǒng),并且在系統(tǒng)構(gòu)造中盡可能運(yùn)用人類(lèi)的自然思維方式)。降低、分解問(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)題域中涉及到哪些類(lèi)(對(duì)象)這些類(lèi)(對(duì)象)各有哪些屬性和方法;這些類(lèi)(對(duì)象)之間的關(guān)系如何。計(jì)算機(jī)科學(xué)與技術(shù)系4面向?qū)ο蠹夹g(shù)基礎(chǔ)3. 類(lèi)與對(duì)象之間的關(guān)系對(duì)象是表示現(xiàn)實(shí)世界中某個(gè)具體的事物;類(lèi)是對(duì)對(duì)象的抽象描述。張三 類(lèi)(CLASS) 如: “man class ”對(duì)對(duì)象進(jìn)行抽象為類(lèi)對(duì)類(lèi)進(jìn)行實(shí)例化5面向?qū)ο蠹夹g(shù)基礎(chǔ)4. 面向?qū)ο蟮幕咎卣鞣庋b性:就是把對(duì)象的屬性和服務(wù)結(jié)合成一個(gè)獨(dú)立的相同單位,并盡可能隱蔽對(duì)象的內(nèi)部細(xì)節(jié)。其兩個(gè)主要目的:一是保護(hù)類(lèi)中的數(shù)據(jù),二是隱藏細(xì)節(jié)。繼承性:
3、主要目的是為了“擴(kuò)展”原本類(lèi)的功能,加強(qiáng)或改進(jìn)原本類(lèi)所沒(méi)有定義的屬性及方法。父類(lèi)和子類(lèi)多態(tài)性:一個(gè)消息被不同的類(lèi)型的對(duì)象或相同類(lèi)型的對(duì)象接收時(shí)產(chǎn)生不同的行為。計(jì)算機(jī)科學(xué)與技術(shù)系6計(jì)算機(jī)科學(xué)與技術(shù)系Java類(lèi)成員變量的聲明格式為: 修飾符 (=缺省值)成員方法的聲明格式為:3.1Java類(lèi)的定義一種引用數(shù)據(jù)類(lèi)型是組成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)的成員定義之前,用來(lái)限定其他對(duì)象對(duì)該對(duì)象成員的訪(fǎng)問(wèn)權(quán)限。缺省為包級(jí)權(quán)限3.1Java類(lèi)的定義8計(jì)算機(jī)科學(xué)與技術(shù)系修飾符使用說(shuō)明:3.1Java類(lèi)的定義只有公用的程序中的某些方法,才會(huì)使用public修飾符。某個(gè)成員對(duì)于大部分程序來(lái)說(shuō)不太會(huì)使用到,但是對(duì)于別的package中繼承的子類(lèi)中會(huì)使用到,則使用protected修飾符。如果只想讓同package中的類(lèi)使用的方法或是屬性,則使用(default)修
5、飾符。對(duì)于只是自己類(lèi)內(nèi)部所使用的屬性或方法,則使用private修飾符來(lái)隱藏它們。如果你不確定該用何種修飾符,最好設(shè)定為(default)9計(jì)算機(jī)科學(xué)與技術(shù)系對(duì)于class的權(quán)限修飾符只可以用public和default。3.1Java類(lèi)的定義public類(lèi),可以在任意地方被訪(fǎng)問(wèn)。default類(lèi),只可以被同一個(gè)包內(nèi)的類(lèi)訪(fǎng)問(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è)類(lèi)的每個(gè)對(duì)象有不同的成員變量存儲(chǔ)空間。同一個(gè)類(lèi)的每個(gè)對(duì)象共享此類(lèi)的方法。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è)類(lèi)的每個(gè)對(duì)象有不同的成員變量存儲(chǔ)空間。同一個(gè)類(lèi)的每個(gè)對(duì)象共享此類(lèi)的方法。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類(lèi)中的一個(gè)用來(lái)初始化對(duì)象的方法。Java中的每個(gè)類(lèi)都有構(gòu)造方法,用來(lái)初始化該類(lèi)的一個(gè)對(duì)象。構(gòu)造方法的語(yǔ)法格式為:例:Animal類(lèi)的構(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)造方法的名稱(chēng)一定和類(lèi)名稱(chēng)一樣。構(gòu)造方法只能由new運(yùn)算符調(diào)用。當(dāng)沒(méi)有指定構(gòu)造方法時(shí),編譯器會(huì)為類(lèi)自動(dòng)添加形如 類(lèi)名() 的構(gòu)造方法,成員變量的取值為各種類(lèi)型的默認(rèn)值當(dāng)我們自行編寫(xiě)一個(gè)構(gòu)造方法之后,Java在編譯時(shí)就不再會(huì)幫加上前面提到的那個(gè)默認(rèn)的無(wú)參構(gòu)造方法。使用不同數(shù)量、不同類(lèi)型的參數(shù)對(duì)類(lèi)初始化會(huì)擁有多個(gè)構(gòu)造方法15計(jì)算機(jī)科學(xué)與技術(shù)系用static關(guān)鍵字可以聲明類(lèi)變量(靜態(tài)變量)和類(lèi)方法(靜態(tài)方法)。類(lèi)變量為該類(lèi)的所有對(duì)象共享。類(lèi)變量可通過(guò)類(lèi)名直接訪(fǎng)問(wèn),也可以
11、通過(guò)該類(lèi)的對(duì)象訪(fǎng)問(wèn)。類(lèi)變量在定義時(shí)必須進(jìn)行初始化。類(lèi)變量在類(lèi)加載時(shí),就分配了內(nèi)存空間。例:TestStatic.java3.4static關(guān)鍵字16計(jì)算機(jī)科學(xué)與技術(shù)系用static關(guān)鍵字可以聲明靜態(tài)變量(類(lèi)變量)和靜態(tài)方法(類(lèi)方法)。靜態(tài)變量?jī)H在生成第一個(gè)對(duì)象時(shí)分配內(nèi)存。類(lèi)的靜態(tài)變量為該類(lèi)的所有對(duì)象共享。靜態(tài)變量可通過(guò)類(lèi)名直接訪(fǎng)問(wèn),也可以通過(guò)該類(lèi)的對(duì)象訪(fǎng)問(wèn)。static方法中不可訪(fǎng)問(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)變量(類(lèi)變量)和靜態(tài)方法(類(lè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方法中不可訪(fǎng)問(wèn)非static的成員。3.4static關(guān)鍵字19計(jì)算機(jī)科學(xué)與技術(shù)系Java中使用extends關(guān)鍵字實(shí)現(xiàn)類(lèi)的繼承機(jī)制。語(yǔ)法規(guī)則:Java只支持單繼承,不允許多繼承。注意:修飾符為private的屬性和方法不會(huì)被繼承。注意:構(gòu)造方法也不會(huì)被繼承。根類(lèi):java.lang.Object類(lèi)3.5類(lèi)的繼承
14、修飾符 class 子類(lèi)名 extends 父類(lèi)名 /Fish.javapublic class Fish extends Animal public Fish() 20計(jì)算機(jī)科學(xué)與技術(shù)系Java中使用extends關(guān)鍵字實(shí)現(xiàn)類(lèi)的繼承機(jī)制。語(yǔ)法規(guī)則:Java只支持單繼承,不允許多繼承。通過(guò)繼承,子類(lèi)自動(dòng)擁有父類(lèi)的除private類(lèi)型之外的所有成員變量和成員方法。根類(lèi):java.lang.Object類(lèi)3.5類(lèi)的繼承 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)類(lèi)的繼承機(jī)制。語(yǔ)法規(guī)則:3.7類(lèi)的繼承 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ù)系在類(lèi)的方法定義中使用的this關(guān)鍵字代表使用該方法的對(duì)象的引用。當(dāng)必須指出當(dāng)前使用方法的對(duì)象是誰(shuí)時(shí)要用this。有時(shí)使用this可以處理成員變量和和重名的情況。this可以看作是一個(gè)變量,它的值是當(dāng)前對(duì)象的引用例:TestThis.javathis()則是調(diào)用自己類(lèi)的構(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)用自己類(lèi)的構(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)引用父類(lèi)的成員。例:TestSuper.java3.6this、super關(guān)鍵字25計(jì)算機(jī)科學(xué)與技術(shù)系Java中使用super關(guān)鍵字來(lái)引用父類(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)用父類(lèi)的構(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ù)系子類(lèi)的構(gòu)造過(guò)程中必須調(diào)用其父類(lèi)的構(gòu)造方
22、法。調(diào)用方法:顯式和隱式 1. 顯式:子類(lèi)可以在自己的構(gòu)造方法super(參數(shù)列表)調(diào)用父類(lèi)的構(gòu)造方法。 注:如果調(diào)用super(參數(shù)列表),則必須寫(xiě)在子類(lèi)構(gòu)造方法的第一行。 2. 隱式:如果子類(lèi)的構(gòu)造方法中沒(méi)有顯式地調(diào)用父類(lèi)的構(gòu)造方法,則系統(tǒng)默認(rèn)先調(diào)用父類(lèi)無(wú)參的構(gòu)造方法。如果子類(lèi)構(gòu)造方法中既沒(méi)顯式調(diào)用父類(lèi)構(gòu)造方法,而父類(lèi)中又沒(méi)有無(wú)參的構(gòu)造方法,則編譯出錯(cuò)。 例:TestSuperSub.java3.7繼承中的構(gòu)造方法29計(jì)算機(jī)科學(xué)與技術(shù)系子類(lèi)的構(gòu)造過(guò)程中必須調(diào)用其父類(lèi)的構(gòu)造方法。子類(lèi)可以在自己的構(gòu)造方法super(參數(shù)列表)調(diào)用父類(lèi)的構(gòu)造方法。3.7繼承中的構(gòu)造方法使用this(參數(shù)列表)調(diào)
23、用本類(lèi)的另外的構(gòu)造方法。如果調(diào)用super(參數(shù)列表),則必須寫(xiě)在子類(lèi)構(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ù)系子類(lèi)的構(gòu)造過(guò)程中必須調(diào)用其父類(lèi)的構(gòu)造方法。子類(lèi)可以在自己的構(gòu)造方法super(參數(shù)列表)調(diào)用父類(lèi)的構(gòu)造方法。3.11繼承中的構(gòu)造方法使用this(參數(shù)列表)調(diào)用本類(lèi)的另外的構(gòu)造方法。如果調(diào)用su
24、per(參數(shù)列表),則必須寫(xiě)在子類(lèi)構(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è)類(lèi)中可以定義有相同的名字、但參數(shù)個(gè)數(shù)或類(lèi)型不同的多個(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ù)類(lèi)型不同。參數(shù)類(lèi)型的區(qū)分度一定要足夠,例如不能是同一簡(jiǎn)單類(lèi)型的參數(shù),如int與long。返回類(lèi)型不能用來(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ù)系覆蓋:在子類(lèi)中根據(jù)需要對(duì)從父類(lèi)中繼承來(lái)的方法進(jìn)行重寫(xiě)。注意:重寫(xiě)方法必須和被重寫(xiě)方法具
30、有相同的方法名稱(chēng)、參數(shù)和返回值類(lèi)型。重寫(xiě)方法不能使用比被重寫(xiě)方法更嚴(yán)格的訪(fǎng)問(wèn)權(quán)限。 例:TestOverride.java思考:覆蓋和重載的區(qū)別3.9方法的覆蓋(override)38計(jì)算機(jī)科學(xué)與技術(shù)系在子類(lèi)中可以根據(jù)需要對(duì)從父類(lèi)中繼承來(lái)的方法進(jìn)行重寫(xiě)。重寫(xiě)方法必須和被重寫(xiě)方法具有相同的方法名稱(chēng)、參數(shù)和返回值類(lèi)型。重寫(xiě)方法不能使用比被重寫(xiě)方法更嚴(yán)格的訪(fǎng)問(wèn)權(quán)限。例:TestOverride.java注意:重寫(xiě)和重載的區(qū)別3.9方法的重寫(xiě)(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ù)系在子類(lèi)中可以根據(jù)需要對(duì)從父類(lèi)中繼承來(lái)的方法進(jìn)行重寫(xiě)。重寫(xiě)方法必須和被重寫(xiě)方法具有相同的方法名稱(chēng)、參數(shù)3.9方法的重寫(xiě)(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í)際類(lèi)型,根據(jù)其實(shí)際的類(lèi)型調(diào)用其方法。例:TestEqualsPolymoph.java3.10多態(tài)41計(jì)算機(jī)科學(xué)與技術(shù)系public boolean equals(Objectobj)可以根據(jù)需要在用戶(hù)自定義類(lèi)中重寫(xiě)equals()方法。例:TestEquals.java3.12Object類(lèi)-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ù)需要在用戶(hù)自定義類(lèi)中重寫(xiě)equals()方法。例:TestEquals.java3.12Object類(lèi)-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ì)象是否是它右邊的類(lèi)
37、的實(shí)例,返回boolean類(lèi)型的數(shù)據(jù)。 Dog和Cat都是Animal的子類(lèi)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)要有繼承要有覆蓋父類(lèi)引用指向子類(lèi)對(duì)象45計(jì)算機(jī)科學(xué)與技術(shù)系包的作用:便于管理大型軟件系統(tǒng)中數(shù)目眾多的類(lèi),便于類(lèi)的復(fù)用;解決類(lèi)的命名沖突問(wèn)
38、題。指明該中定義的類(lèi)所在的包。格式為:說(shuō)明:package語(yǔ)句作為Java源文件中的第一條語(yǔ)句包對(duì)應(yīng)于文件系統(tǒng)的目錄管理。在package語(yǔ)句中用”.”來(lái)指明包(目錄)的層次。如在程序第一行加上package語(yǔ)句,并且該文件已存儲(chǔ)在該目錄中,那么該文件就包含在該包中。package的命名全都是小寫(xiě)的英文字母。3.11package和import語(yǔ)句package pkg1.pkg2.pkg3;46計(jì)算機(jī)科學(xué)與技術(shù)系為便于管理大型軟件系統(tǒng)中數(shù)目眾多的類(lèi),解決類(lèi)的命名沖突問(wèn)題,Java引入了包機(jī)制。package語(yǔ)句作為Java源文件中的第一條語(yǔ)句,指明該中定義的類(lèi)所在的包。若缺省該語(yǔ)句,則指定為
39、缺省包。格式為:包對(duì)應(yīng)于文件系統(tǒng)的目錄管理。在package語(yǔ)句中用”.”來(lái)指明包(目錄)的層次。例:package的命名全都是小寫(xiě)的英文字母。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ù)目眾多的類(lèi),解決類(lèi)的命名沖突問(wèn)題,Java引入了包機(jī)制。package語(yǔ)句作為Java源文件中的第一條語(yǔ)句,指明該中定義的類(lèi)所在的包。若缺省該語(yǔ)句,則指定為缺省包
41、。格式為:包對(duì)應(yīng)于文件系統(tǒng)的目錄管理。在package語(yǔ)句中用”.”來(lái)指明包(目錄)的層次。例:package的命名全都是小寫(xiě)的英文字母。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è)類(lèi)中使用到這個(gè)包里的類(lèi)方法:寫(xiě)其全名。也可使用import語(yǔ)句,在文件的開(kāi)頭引入要使用到的類(lèi)。java.lang包中的類(lèi),可以不需import。3.11package和import語(yǔ)句49計(jì)算機(jī)科學(xué)與技術(shù)系包的引用: import 包名.說(shuō)明: 訪(fǎng)問(wèn)位于同一個(gè)包中的類(lèi)不需引入import語(yǔ)句放在程序的開(kāi)頭classpath的設(shè)定 將要編譯或執(zhí)行的程序時(shí)所需要的類(lèi)文件(class文件)的最上層包的父目錄應(yīng)設(shè)于環(huán)境變量classpath中。3.11package和import語(yǔ)句* /引入整個(gè)包 具體類(lèi)
43、名 /只引入包中的某個(gè)類(lèi)50計(jì)算機(jī)科學(xué)與技術(shù)系J2SDK中主要的包介紹3.11package和import語(yǔ)句java.lang: 包含一些Java語(yǔ)言的核心類(lèi),如String、Math、Integer、System等,提供常用功能。java.awt:包含了構(gòu)成抽象窗口工具集的多個(gè)類(lèi),這些類(lèi)被用來(lái)構(gòu)建和管理應(yīng)用程序的圖形用戶(hù)界面(GUI)。java.applet:包含applet運(yùn)行所需的一些類(lèi)。:包含執(zhí)行與網(wǎng)絡(luò)相關(guān)的操作的類(lèi)。java.io:包含能提供多種輸入/輸出功能的類(lèi)。java.util:包含一些實(shí)用工具類(lèi),如定義系統(tǒng)特性、使用與日期日歷相關(guān)的函數(shù)。jar cvf pkg_name.j
44、ar 包名jar tvf pkg_name.jar51計(jì)算機(jī)科學(xué)與技術(shù)系final可用來(lái)修飾變量、方法和類(lèi)。final的屬性或變量,即是一個(gè)常量。final的方法不能被重寫(xiě)。final的類(lèi)不能被繼承。例:TestFinal.java3.12final關(guān)鍵字final的成員變量:只能被初始化一次(定義時(shí)或在構(gòu)造方法中進(jìn)行)final的局部變量:代表的是一個(gè)常量52計(jì)算機(jī)科學(xué)與技術(shù)系final可用來(lái)修飾變量、方法和類(lèi)。final的變量不能被改變。final的方法不能被重寫(xiě)。final的類(lèi)不能被繼承。例: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類(lèi),例String、Math、Boolean等。(參看API文檔)
46、如果自己的類(lèi)不想被別人繼承,可用final修飾。3.12final關(guān)鍵字54計(jì)算機(jī)科學(xué)與技術(shù)系用abstract關(guān)鍵字修飾的類(lèi),即抽象類(lèi)。作用:描述概念性的內(nèi)容,這樣可以提高開(kāi)發(fā)效率,更好地統(tǒng)一用戶(hù)“接口”。語(yǔ)法格式:抽象類(lèi)必須被繼承,抽象方法必須被重寫(xiě)。抽象類(lèi)不能被實(shí)例化;抽象方法只需聲明,無(wú)需實(shí)現(xiàn)。抽象類(lèi)通常包括一個(gè)或多個(gè)抽象方法,但不是一定包括若類(lèi)中包含了抽象方法,則該類(lèi)必須被定義為抽象類(lèi)。3.13抽象類(lèi)和抽象方法abstract class 抽象類(lèi)名 abstract 返回類(lèi)型 抽象方法(參數(shù)表);多態(tài)55計(jì)算機(jī)科學(xué)與技術(shù)系注:3.13抽象類(lèi)和抽象方法雖然抽象類(lèi)不能產(chǎn)生實(shí)例對(duì)象,但還是
47、需要構(gòu)造方法的存在!abstract關(guān)鍵字只能用在類(lèi)和方法上,而不能用在屬性和一般的變量上。56計(jì)算機(jī)科學(xué)與技術(shù)系是抽象方法和常量的定義的集合。從本質(zhì)上講,接口是一種特殊的抽象類(lèi),這種抽象類(lèi)中只包含常量和方法的定義,而沒(méi)有變量和方法的實(shí)現(xiàn)。接口的定義格式:3.14接口-interfacepublic interface 接口名 extends 父接口名列表 type NAME = value; /該常量被實(shí)現(xiàn)該接口的多個(gè)類(lèi)共享; /缺省的具有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();可寫(xiě)成: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)隔開(kāi)59計(jì)算機(jī)科學(xué)與技術(shù)系在類(lèi)的聲明中用implements子句來(lái)表示一個(gè)類(lèi)使用某個(gè)接口。多個(gè)無(wú)關(guān)的類(lèi)可以實(shí)現(xiàn)同一個(gè)接口。一個(gè)類(lèi)可以實(shí)現(xiàn)多個(gè)無(wú)關(guān)的接口。定義Java類(lèi)的語(yǔ)法格式:在類(lèi)體中可以使用接口中定義的常量,而且必須實(shí)現(xiàn)接口中定義的所有方法。3.14接口 類(lèi)名 extends implements , 60計(jì)算機(jī)科學(xué)與技術(shù)系多個(gè)無(wú)關(guān)的類(lèi)可以實(shí)現(xiàn)同一個(gè)接口。一個(gè)類(lèi)可以實(shí)現(xiàn)多個(gè)無(wú)關(guān)的接口。與繼承關(guān)系類(lèi)似,接口與實(shí)現(xiàn)類(lèi)之間存在多態(tài)性。定義Java類(lèi)的語(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)的類(lèi)可以實(shí)現(xiàn)同一個(gè)接口。一個(gè)類(lèi)可以實(shí)現(xiàn)多個(gè)無(wú)關(guān)的接口。與繼承關(guān)系類(lèi)似,接口與實(shí)現(xiàn)類(lèi)之間存在多態(tài)性。定義Java類(lèi)的語(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)的類(lèi)可以實(shí)現(xiàn)同一個(gè)接口。一個(gè)類(lèi)可以實(shí)現(xiàn)多個(gè)無(wú)關(guān)的接口。與繼承關(guān)系類(lèi)似,接口與實(shí)現(xiàn)類(lèi)之間存在多態(tài)性。定義Java類(lèi)的語(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)型來(lái)使用。任何實(shí)現(xiàn)該接口的類(lèi)的實(shí)例都可以存儲(chǔ)在該接口類(lèi)型的變量中。通過(guò)這些變量可以訪(fǎng)問(wèn)類(lèi)所實(shí)現(xiàn)的接口中的方法。計(jì)算機(jī)科學(xué)與技術(shù)系3.14接口64內(nèi)部類(lèi)內(nèi)部類(lèi):在一個(gè)類(lèi)的內(nèi)部嵌套定義類(lèi)。Inner Class 一般用來(lái)生成事件適配器,用于事件處理。3.15 內(nèi)部類(lèi)
54、 Inner Class是其它類(lèi)的成員在一個(gè)語(yǔ)句塊的內(nèi)部定義在表達(dá)式內(nèi)部匿名定義 計(jì)算機(jī)科學(xué)與技術(shù)系65內(nèi)部類(lèi)的定義和實(shí)現(xiàn)示例:TwoListenInner.java文件是一個(gè)說(shuō)明內(nèi)部類(lèi)如何使用的例子其中,定義了兩個(gè)內(nèi)部類(lèi):MouseMotionHandler和MouseEventHandler,分別用來(lái)處理鼠標(biāo)移動(dòng)事件和鼠標(biāo)點(diǎn)按事件。計(jì)算機(jī)科學(xué)與技術(shù)系3.15 內(nèi)部類(lè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)部類(lèi)直接訪(fǎng)問(wèn)外部類(lèi)的成員和方法外部類(lèi)如同使用其它類(lèi)一樣使用自己的內(nèi)部類(lèi)內(nèi)部類(lèi)可以被
56、更多的訪(fǎng)問(wèn)控制符修飾: private:只有外層類(lèi)可以使用 protected:只有外層類(lèi)、與外層類(lèi)處于同一個(gè)包的類(lèi)、外層類(lèi)的子類(lèi)可以訪(fǎng)問(wèn) static:內(nèi)部類(lèi)中只能訪(fǎng)問(wèn)外部類(lèi)中的static成員除外層類(lèi)其他類(lèi)使用內(nèi)部類(lèi)需要以下代碼形式: OutClass out = new OutClass();OutClass.InnerClass inn1 = out.new InnerClass ();內(nèi)部類(lèi)可以實(shí)現(xiàn)接口及抽象類(lèi)的抽象方法3.3 內(nèi)部類(lèi) Inner Class67匿名類(lèi)Anonymous Class是一種特殊的內(nèi)部類(lèi),是在一個(gè)表達(dá)式內(nèi)部包含一個(gè)完整的類(lèi)定義(類(lèi)的定義和一個(gè)實(shí)例的創(chuàng)建同時(shí)進(jìn)行)。例如:3.15 內(nèi)部類(lè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)益歸上傳用戶(hù)所有。
- 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ì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 貴州財(cái)經(jīng)大學(xué)《環(huán)境衛(wèi)生學(xué)2》2023-2024學(xué)年第一學(xué)期期末試卷
- 2025年安徽建筑安全員《B證》考試題庫(kù)及答案
- 2025貴州建筑安全員-A證考試題庫(kù)及答案
- 廣州珠江職業(yè)技術(shù)學(xué)院《素描1》2023-2024學(xué)年第一學(xué)期期末試卷
- 2025遼寧建筑安全員C證考試題庫(kù)
- 2025年陜西省安全員A證考試題庫(kù)
- 2025山東省建筑安全員B證考試題庫(kù)附答案
- 2025黑龍江省安全員A證考試題庫(kù)
- 2025年湖北省建筑安全員《B證》考試題庫(kù)及答案
- 2025青海省建筑安全員知識(shí)題庫(kù)附答案
- 八、射線(xiàn)、直線(xiàn)和角(教學(xué)設(shè)計(jì))-2024-2025學(xué)年四年級(jí)上冊(cè)數(shù)學(xué)蘇教版
- DB65-T 4828-2024 和田玉(子料)鑒定
- 人教版(2024新版)七年級(jí)上冊(cè)英語(yǔ)各單元重點(diǎn)單詞、句型背誦清單
- 十七個(gè)崗位安全操作規(guī)程手冊(cè)
- 就業(yè)招聘服務(wù)行業(yè)經(jīng)營(yíng)模式分析
- 港口液體危化品裝卸管理人員理論考試題庫(kù)-下(判斷題)
- 2024住院患者靜脈血栓栓塞癥預(yù)防護(hù)理與管理專(zhuān)家共識(shí)要點(diǎn)(全文)
- 人教版(2024)八年級(jí)上冊(cè)物理期末測(cè)試卷(含答案)
- 2024關(guān)于家長(zhǎng)會(huì)家長(zhǎng)代表發(fā)言稿(30篇)
- 中醫(yī)內(nèi)科學(xué):中醫(yī)內(nèi)科學(xué)肢體經(jīng)絡(luò)病證考試題(題庫(kù)版)
- 高中生物學(xué)科思維導(dǎo)圖(人教版必修一)
評(píng)論
0/150
提交評(píng)論