版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
類(lèi)和對(duì)象主要內(nèi)容面向?qū)ο缶幊蹋∣OP)的概念及特點(diǎn)Java中面向?qū)ο缶幊虅?chuàng)建自定義類(lèi)、接口和包類(lèi)的繼承構(gòu)造函數(shù)類(lèi)的多態(tài)性面向?qū)ο缶幊痰母拍罟矓?shù)據(jù)函數(shù)函數(shù)函數(shù)函數(shù)算法+數(shù)據(jù)結(jié)構(gòu)數(shù)據(jù)方法方法數(shù)據(jù)方法方法過(guò)程式程序設(shè)計(jì)OOP程序設(shè)計(jì)對(duì)象+消息消息面向?qū)ο缶幊痰奶攸c(diǎn)封裝(encapsulation)實(shí)現(xiàn)了信息的隱藏及安全性提高了程序的模塊化,且易于維護(hù)繼承(inheritance)交通工具車(chē)船飛機(jī)汽車(chē)火車(chē)父類(lèi)/超類(lèi)(superclass)子類(lèi)(subclass)Java僅支持單重繼承,但可通過(guò)接口實(shí)現(xiàn)多重繼承面向?qū)ο缶幊痰奶攸c(diǎn)繼承(續(xù))體現(xiàn)了對(duì)現(xiàn)實(shí)世界的抽象模擬提高了代碼的復(fù)用性多態(tài)(polymorphism)用同一個(gè)名字調(diào)用實(shí)現(xiàn)不同操作的方法方式1:不同的類(lèi)之間的同名方法 如:中國(guó)人/日本人/美國(guó)人說(shuō)話(huà)方式2:參數(shù)不同的同名方法(如加法)使用方便,且降低了維護(hù)和編程量JAVA中的面向?qū)ο缶幊處讉€(gè)概念類(lèi):抽象的集合概念系統(tǒng)類(lèi)庫(kù)中已定義好的類(lèi)用戶(hù)自定義的類(lèi)對(duì)象(實(shí)例instance):實(shí)際個(gè)體創(chuàng)建某個(gè)類(lèi)的具體對(duì)象(類(lèi)似變量聲明)類(lèi)名 欲創(chuàng)建的對(duì)象名=new類(lèi)名(參數(shù)表);例如: Strings=newString(“Hello!”);繼承、子類(lèi)、父類(lèi)JAVA中的面向?qū)ο缶幊蘆ava中的類(lèi)結(jié)構(gòu)基類(lèi):所有JAVA的類(lèi)都派生自O(shè)bjectJava的類(lèi)可組織在包(package)中Java提供的標(biāo)準(zhǔn)類(lèi)庫(kù)分布在一系列的包中,如java.lang,java.util,等編程的過(guò)程就是繼承基類(lèi)或標(biāo)準(zhǔn)類(lèi)而創(chuàng)建、定義特殊子類(lèi)的過(guò)程類(lèi)和對(duì)象對(duì)象
對(duì)象就是一組變量和相關(guān)方法的集合,其中變量表明對(duì)象的狀態(tài),方法表明對(duì)象所具有的行為。類(lèi) 類(lèi)是Java中的一種重要的復(fù)合數(shù)據(jù)類(lèi)型,是組成Java程序的基本要素。它封裝了一類(lèi)對(duì)象的狀態(tài)和方法,是這一類(lèi)對(duì)象的原型。為什么使用類(lèi)采用簡(jiǎn)單數(shù)據(jù)類(lèi)型表示現(xiàn)實(shí)世界中概念的局限性; 例如:采用int型數(shù)據(jù)表示一個(gè)日期概念,需要使用3個(gè)變量:
int day,month,year;為什么使用類(lèi)如果要表示2個(gè)人的生日,就要使用6個(gè)變量:
int
mybirthday,mybirthmonth,mybirthyear;
int
yourbirthday,yourbirthmonth,yourbirthyear;使用復(fù)合數(shù)據(jù)結(jié)構(gòu)將具有相互關(guān)系的變量組合起來(lái)組成一個(gè)新的類(lèi)型,用來(lái)表示一個(gè)完整的概念,這種新類(lèi)型叫復(fù)合數(shù)據(jù)類(lèi)型。classMyDate{ publicintday,month,year; }MyDate
mybirth,yourbirth;集成變量和方法類(lèi)中不但有變量,還有與之相關(guān)的操作所定義的方法。將變量和方法封裝在一個(gè)類(lèi)中,可以對(duì)成員變量進(jìn)行隱藏,外部對(duì)類(lèi)成員的訪問(wèn)都通過(guò)方法進(jìn)行,能夠保護(hù)類(lèi)成員不被非法修改。設(shè)計(jì)準(zhǔn)則:將類(lèi)中的成員變量設(shè)為private,而為每一個(gè)成員變量提供兩個(gè)public方法:setMethod(args):void;getMethod():Classtype。其他類(lèi)在設(shè)置或讀取成員變量值要通過(guò)以上兩個(gè)方法,而不能直接訪問(wèn)成員變量。集成變量和方法MyDatedate;已知當(dāng)前日期對(duì)象,求第2天的日期對(duì)象date.day=date.day+1;//如果date.day已經(jīng)為31,操作 //結(jié)果是非法狀態(tài)定義一個(gè)成員方法tomorrow(),求第2天的日期對(duì)象外部要獲得當(dāng)前日期的后一天時(shí),只要調(diào)用:
date.tomorrow()類(lèi)聲明格式:[public][abstract|final]classclassName[extendssuperclassName][implementsinterfaceNameList]{……..}類(lèi)聲明類(lèi)修飾符:public:允許其他類(lèi)(沒(méi)有限制)訪問(wèn)本類(lèi),一個(gè)源文件僅可以有一個(gè)public類(lèi)缺省:可被當(dāng)前包中的其他類(lèi)訪問(wèn)abstract:沒(méi)有實(shí)例的抽象概念類(lèi)final:不能再被擴(kuò)展,不包含子類(lèi)的類(lèi);易于安全性的實(shí)現(xiàn),或用于創(chuàng)建固定功能的類(lèi)父類(lèi)繼承聲明:extends父類(lèi)名實(shí)現(xiàn)接口(interface):implements接口名類(lèi)體定義類(lèi)體中定義了該類(lèi)中所有的變量和該類(lèi)所支持的方法classclassName{[public|protected|private][static][final][transient][volatile]typevariableName; //成員變量
[public|protected|private][static][final|abstract][native][synchronized]
returnType
methodName([paramList])[throws
exceptionList]{statements} //成員方法}成員變量成員變量的聲明方式
[public|protected|private][static][final][transient][volatile] typevariableName; //成員變量成員變量的類(lèi)型可以是Java中任意的數(shù)據(jù)類(lèi)型,包括簡(jiǎn)單類(lèi)型,類(lèi),接口,數(shù)組。在一個(gè)類(lèi)中的成員變量應(yīng)該是唯一的。成員變量聲明成員變量〔member〕的語(yǔ)法
[修飾符]數(shù)據(jù)類(lèi)型變量名;引用:對(duì)象名.變量,如修飾符訪問(wèn)控制符public:可被所有其他類(lèi)引用private:僅可被該類(lèi)自身引用和修改,不能被其他任何類(lèi)(包括子類(lèi))引用成員變量protected:該類(lèi)自身、子類(lèi)、同一包中的其他類(lèi)privateprotected:該類(lèi)自身、子類(lèi)缺?。罕景械念?lèi)static:類(lèi)成員變量,對(duì)所有的實(shí)例一致,引用時(shí)前綴可使用類(lèi)名或?qū)ο竺鹒inal:數(shù)值不變常量,定義同時(shí)應(yīng)對(duì)其進(jìn)行初始化final變量在Java語(yǔ)言中,可以利用關(guān)鍵字final將一個(gè)變量定義為常量標(biāo)識(shí)符。finaldoublepi=3.1415926;變量pi的值在作用域范圍內(nèi),只能被使用,不能被修改。final變量publicclassFinalVariable{privatestaticfinaldoublepi=3.1415926;publicstaticvoidmain(Stringarge[]){
System.out.println("pi="+pi);
System.out.println("area="+3*3*pi);}}變量的作用域在類(lèi)體中聲明的類(lèi)成員變量,可在該類(lèi)的各個(gè)成員方法中使用;在某個(gè)方法體中或參數(shù)表中聲明的變量,只能在該方法體中使用;在某個(gè)語(yǔ)句塊中聲明的變量,只能在該語(yǔ)句塊中使用。變量的作用域變量的作用域在Java語(yǔ)言中,嵌套的程序塊的內(nèi)層與外層,不允許定義相同的變量名,否則將導(dǎo)致編譯錯(cuò)誤。變量的作用域
publicclassScopeError{publicstaticvoidmain(Stringarge[]){int
E
=999;{int
E=999;
System.out.println("E="+E);}}}成員方法方法的實(shí)現(xiàn)包括兩部分內(nèi)容:方法聲明和方法體
[public|protected|private][static][final|abstract][native][synchronized]
returnType
methodName([paramList])[throws
exceptionList] {statements} 成員方法定義對(duì)類(lèi)內(nèi)成員變量(數(shù)據(jù))的操作方法的聲明語(yǔ)法:
[修飾符]返回類(lèi)型方法名(參數(shù)列表)
[throws例外名]{
方法體;
}方法的性質(zhì)、接受哪些參數(shù)、如何返回信息成員方法修飾符(Modifier):訪問(wèn)控制符:public、private、protected、privateprotectedstatic:靜態(tài)方法,又稱(chēng)類(lèi)方法使用類(lèi)名或?qū)ο竺鳛榍熬Y,建議使用類(lèi)名在方法體中只能使用static變量和static方法abstract:只有接口沒(méi)有語(yǔ)句,要在子類(lèi)中通過(guò)重新定義(override)來(lái)實(shí)現(xiàn)final:不能被重新定義(override)方法聲明返回類(lèi)型可以是任意的Java數(shù)據(jù)類(lèi)型,當(dāng)一個(gè)方法不需要返回值時(shí),返回類(lèi)型為void參數(shù)的類(lèi)型可以是簡(jiǎn)單數(shù)據(jù)類(lèi)型,也可以是引用數(shù)據(jù)類(lèi)型(數(shù)組類(lèi)型、類(lèi)或接口),參數(shù)傳遞方式是值傳遞。方法聲明throws:通告本方法中會(huì)產(chǎn)生的例外(異常)類(lèi)型,提醒調(diào)用者要對(duì)相應(yīng)的可能例外進(jìn)行處理。當(dāng)執(zhí)行此方法并發(fā)生了例外時(shí),程序會(huì)轉(zhuǎn)入調(diào)用者編制的例外處理程序段。方法體方法體是對(duì)方法的實(shí)現(xiàn)。它包括局部變量的聲明以及所有合法的Java指令。局部變量的作用域只在該方法內(nèi)部設(shè)計(jì)原則類(lèi)中的數(shù)據(jù)使用private定義使用public方法來(lái)操作數(shù)據(jù)把邏輯上相關(guān)聯(lián)的數(shù)據(jù)封裝成新的類(lèi)來(lái)使用,類(lèi)似結(jié)構(gòu)體不要定義太龐大的類(lèi),要把無(wú)關(guān)的功能適當(dāng)分離培養(yǎng)良好的編程風(fēng)格類(lèi)定義舉例publicclassMyDate{ privateintday,month,year; publicvoidtomorrow(){ if(day<daysInMonth()){ day=day+1; } else…… } publicint
daysInMonth(){……} }方法重載(MethodOverloading)方法重載即指多個(gè)方法可以享有相同的名字。但是這些方法的參數(shù)必須不同,或者是參數(shù)個(gè)數(shù)不同,或者是參數(shù)類(lèi)型不同方法重載(MethodOverloading)舉例:
要打印不同類(lèi)型的數(shù)據(jù),int,float,String,不需要定義不同名的方法:printInt(int);printFloat(float);printString(String)
利用方法重載,只需要定義一個(gè)方法名:
println(),接收不同的參數(shù):
println(int);
println(float);
println(String);構(gòu)造函數(shù)Java試圖在每個(gè)對(duì)象一誕生時(shí),就給它一確定的狀態(tài),但有時(shí)這種系統(tǒng)的缺省初值不合適;所以在創(chuàng)建一個(gè)新對(duì)象時(shí),需用構(gòu)造函數(shù)完成合法的初始化,使類(lèi)內(nèi)成員的初始化工作不依賴(lài)于外界完成。構(gòu)造函數(shù)構(gòu)造函數(shù)是一種特殊的方法。Java中的每個(gè)類(lèi)都有構(gòu)造函數(shù),用來(lái)初始化該類(lèi)的一個(gè)新的對(duì)象。構(gòu)造函數(shù)具有和類(lèi)名相同的名稱(chēng),而且不返回任何數(shù)據(jù)類(lèi)型,在構(gòu)造函數(shù)的實(shí)現(xiàn)中,也可以進(jìn)行方法重載。構(gòu)造函數(shù)構(gòu)造函數(shù)只能在創(chuàng)建類(lèi)對(duì)象時(shí)由系統(tǒng)隱含調(diào)用,而不能直接引用;類(lèi)對(duì)象創(chuàng)建時(shí),利用運(yùn)算符new在內(nèi)存中開(kāi)辟專(zhuān)用空間,存放指定的類(lèi)的實(shí)例(即對(duì)象),這時(shí)會(huì)自動(dòng)執(zhí)行類(lèi)的構(gòu)造函數(shù),初始化新對(duì)象的成員變量。構(gòu)造函數(shù)的繼承子類(lèi)沒(méi)有定義構(gòu)造函數(shù)時(shí),自動(dòng)繼承父類(lèi)不含參數(shù)的構(gòu)造函數(shù),并在創(chuàng)建新子類(lèi)對(duì)象時(shí)自動(dòng)執(zhí)行子類(lèi)有自己的構(gòu)造函數(shù)時(shí),創(chuàng)建新子類(lèi)對(duì)象時(shí)也要先執(zhí)行父類(lèi)不含參數(shù)的構(gòu)造函數(shù),再執(zhí)行自己的構(gòu)造函數(shù)例:Sandwich.javaclassMeal{Meal(){……}}classBread{Bread(){……}}classCheese{Cheese(){……}}classLettuce{Lettuce(){……}}classLunchextendsMeal{Lunch(){……}}classPortableLunchextendsLunch{
PortableLunch(){……}}classSandwichextendsPortableLunch{Breadb=newBread();Cheesec=newCheese();Lettucel=newLettuce();Sandwich(){…...}publicstaticvoidmain(String[]args){newSandwich();}}///:~構(gòu)造函數(shù)的繼承注意構(gòu)造函數(shù)的調(diào)用順序:按繼承順序依次調(diào)用父類(lèi)的不含參數(shù)的構(gòu)造函數(shù),直到到達(dá)本子類(lèi)依次執(zhí)行本子類(lèi)成員對(duì)象的構(gòu)造函數(shù)最后,執(zhí)行本子類(lèi)的構(gòu)造函數(shù)例:在生成sandwich對(duì)象時(shí)構(gòu)造函數(shù)的調(diào)用順序?yàn)椋篗eal()->Lunch()->PortableLunch()->Bread()
->Cheese()->Lettuce()->Sandwich()構(gòu)造函數(shù)的繼承子類(lèi)的構(gòu)造函數(shù)定義中,如要調(diào)用父類(lèi)的含參數(shù)的構(gòu)造函數(shù),需用super關(guān)鍵字,且該調(diào)用語(yǔ)句必須是子類(lèi)構(gòu)造函數(shù)的第一個(gè)可執(zhí)行語(yǔ)句。一構(gòu)造函數(shù)可利用this調(diào)用本類(lèi)其他的構(gòu)造函數(shù),此時(shí)this應(yīng)是第一個(gè)可執(zhí)行語(yǔ)句構(gòu)造函數(shù)publicclassEmployee{ privateStringname; privateintsalary; publicEmployee(Stringn,ints){ name=n; salary=s; } publicEmployee(Stringn){
this(n,0); }構(gòu)造函數(shù) publicEmployee(){
this(“Unknown”); }}
對(duì)象對(duì)象的生成 通過(guò)new操作符生成一個(gè)對(duì)象; 例如:
MyDatedate; date=newMyDate();對(duì)象的構(gòu)造過(guò)程為對(duì)象開(kāi)辟空間,并對(duì)對(duì)象的成員變量進(jìn)行缺省的初始化;對(duì)成員變量進(jìn)行指定的初始化;靜態(tài)數(shù)據(jù)成員、復(fù)雜數(shù)據(jù)成員的初始化可在靜態(tài)初始化器中完成;靜態(tài)初始化器中的語(yǔ)句在類(lèi)加載內(nèi)存時(shí)執(zhí)行,這種初始化操作要比構(gòu)造函數(shù)執(zhí)行得更早;調(diào)用構(gòu)造函數(shù)。對(duì)象的使用對(duì)象的使用通過(guò)一個(gè)引用類(lèi)型的變量來(lái)實(shí)現(xiàn),包括引用對(duì)象的成員變量和方法,通過(guò)運(yùn)算符‘·’可以實(shí)現(xiàn)對(duì)變量的訪問(wèn)和方法的調(diào)用。 例如:
MyDatedate=newMyDate(); date.day //引用date的成員變量day date.tomorrow() //調(diào)用date的方法tomorrow()對(duì)象的構(gòu)造過(guò)程舉例MyDatemy_birth=newMyDate(22,7,1964);MyDatemy_birth
=newMyDate(22,7,1964);為引用變量開(kāi)辟空間對(duì)象的構(gòu)造過(guò)程舉例MyDatemy_birth=newMyDate(22,7,1964);使用‘new’操作符為MyDate類(lèi)型的對(duì)象開(kāi)辟空間對(duì)象的構(gòu)造過(guò)程舉例初始化類(lèi)定義時(shí)指定的變量值對(duì)象的構(gòu)造過(guò)程舉例MyDatemy_birth=newMyDate(22,7,1964);執(zhí)行構(gòu)造函數(shù)對(duì)象的構(gòu)造過(guò)程舉例MyDate
my_birth=newMyDate(22,7,1964);用新生成的對(duì)象給引用變量賦值變量的賦值
intx=7;
inty=x;
MyDates=newMyDate(22,7,1964);
MyDatet=s;變量的賦值t=newMyDate(22,12,1964);一個(gè)小問(wèn)題對(duì)于類(lèi)Rock:
RockR1=newRock(1); RockR2=R1;這時(shí),內(nèi)存中為Rock類(lèi)創(chuàng)建了幾個(gè)實(shí)例呢?如果只有一個(gè)實(shí)例,那么這個(gè)實(shí)例有幾個(gè)引用(reference)呢?包(Package)由于Java編譯器為每個(gè)類(lèi)生成一個(gè)字節(jié)碼文件,且文件名與類(lèi)名相同,因此同名的類(lèi)有可能發(fā)生沖突。為了解決這一問(wèn)題,Java提供包來(lái)管理類(lèi)名空間。包是若干CLASS的松散組合,這些CLASS之間不需要有明確、密切的關(guān)系,如繼承等,但一般它們共同工作,可互相訪問(wèn)彼此的成員。Java用包來(lái)組織CLASS,從而提高了類(lèi)的可重用性。package語(yǔ)句package語(yǔ)句作為Java源文件的第一條語(yǔ)句,指明該文件中定義的類(lèi)所在的包。(若缺省該語(yǔ)句,則指定為無(wú)名包)。它的格式為:
packagepkg1[.pkg2[.pkg3…]];Java編譯器把包對(duì)應(yīng)于文件系統(tǒng)的目錄管理,package語(yǔ)句中,用‘
.’
來(lái)指明目錄的層次;
編譯和生成包如果在程序Test.java中已定義了包p1,編譯時(shí)采用如下方式:javac-ddestpathTest.java
則編譯器會(huì)自動(dòng)在destpath目錄下建立一個(gè)子目錄p1,并將生成的.class文件都放到destpath/p1下。import語(yǔ)句為了能使用Java中已提供的類(lèi),我們需要用import語(yǔ)句來(lái)引入所需要的類(lèi)。
importpackage1[.package2…].(classname|*);例如:
importjava.awt.*; importjava.io.*;
javac編譯器編譯源程序時(shí),如果遇到當(dāng)前包中沒(méi)有定義的類(lèi),就會(huì)以環(huán)境變量classpath為相對(duì)查找路徑,按照包名的結(jié)構(gòu)來(lái)查找引用的外部類(lèi)。import語(yǔ)句對(duì)于importjava.io.*;
將按照路徑:classpath\java\io\來(lái)查找所需的外部類(lèi)。環(huán)境變量classpath是用來(lái)指示Java程序所引用的外部類(lèi)所在的一系列相對(duì)路徑的一個(gè)環(huán)境變量。信息隱藏對(duì)類(lèi)的成員施以一定的訪問(wèn)權(quán)限限定,實(shí)現(xiàn)類(lèi)中成員在一定范圍內(nèi)的信息隱藏 同一個(gè)類(lèi)中同一個(gè)包中
不同包中的子類(lèi)不同包中的非子類(lèi)
private ★ default ★ ★ protected ★ ★
★ public ★★ ★ ★ 繼承性繼承性是面向?qū)ο蟪绦蛟O(shè)計(jì)語(yǔ)言的另一基本特征,通過(guò)繼承可以實(shí)現(xiàn)代碼的復(fù)用。繼承而得到的類(lèi)為子類(lèi),被繼承的類(lèi)為父類(lèi),父類(lèi)包括所有直接或間接被繼承的類(lèi)。Java中不支持多重繼承。創(chuàng)建子類(lèi)通過(guò)在類(lèi)的聲明中加入extends子句來(lái)創(chuàng)建一個(gè)類(lèi)的子類(lèi):
classSubClassextendsSuperClass
{ ……}如果缺省extends子句,則該類(lèi)為java.lang.Object的子類(lèi)。子類(lèi)可以繼承父類(lèi)中訪問(wèn)權(quán)限設(shè)定為public、protected、default的成員變量和方法。但是不能繼承訪問(wèn)權(quán)限為private的成員變量和方法。成員變量的隱藏和方法的重寫(xiě)classSuperClass{
intx; ……
voidsetX(){ x=0; } ……}成員變量的隱藏和方法的重寫(xiě)classSubClassextendsSuperClass{
intx; //hidexinSuperClass ……
voidsetX(){//overridemethodsetX()inSuperClass x=5; } …… }引用父類(lèi)成員Java中通過(guò)super來(lái)實(shí)現(xiàn)對(duì)父類(lèi)成員的訪問(wèn)。
1.用來(lái)訪問(wèn)父類(lèi)被隱藏的成員變量,如:super.variable 2.用來(lái)調(diào)用父類(lèi)中被重寫(xiě)的方法,如:super.Method([paramlist]);
3.用來(lái)調(diào)用父類(lèi)的構(gòu)造函數(shù),如:super([paramlist]);多態(tài)性多態(tài)性是指在程序中需要使用父類(lèi)對(duì)象的地方,都可以用子類(lèi)對(duì)象來(lái)代替。
例如:
publicclassEmployeeextendsObject{……} publicclassManagerextendsEmployee{……}
則:
Employeee=newManager();//合法語(yǔ)句
重寫(xiě)方法的調(diào)用對(duì)于重寫(xiě)的方法,Java運(yùn)行時(shí)系統(tǒng)根據(jù)調(diào)用該方法的實(shí)例的類(lèi)型來(lái)決定選擇哪個(gè)方法調(diào)用。
classA{voidcallme(){
System.out.println("InsideA'scallme()method"); } }重寫(xiě)方法的調(diào)用classBextendsA{ voidcallme(){
System.out.println("InsideB'scallme()method"); }}publicclassDispatch{ publicstaticvoidmain(Stringargs[]){ Aa=newB();
a.callme(); }}重寫(xiě)方法的調(diào)用運(yùn)行結(jié)果為:InsideB'scallme()method方法重寫(xiě)時(shí)應(yīng)遵循的原則改寫(xiě)后的方法不能比被重寫(xiě)的方法有更嚴(yán)格的訪問(wèn)權(quán)限改寫(xiě)后的方法不能比被重寫(xiě)的方法產(chǎn)生更多的例外多態(tài)與重載舉例例:Shapes.java三個(gè)類(lèi)Circle、Square、Triangle均有draw()方法和erase()方法,但不同類(lèi)的方法的具體操作其實(shí)并不相同,實(shí)現(xiàn)了多態(tài)。draw()erase()draw()erase()draw()erase()對(duì)象狀態(tài)的確定在Java語(yǔ)言中,提供了操作符instanceof用來(lái)判斷對(duì)象是否屬于某個(gè)類(lèi)的實(shí)例。
publicvoidmethod(Employeee){if(einstanceofManager){…//dosomethingasaManager}elseif(einstanceofContractor){ …}//dosomethingasaContractorelse{ …//dosomethingelse} }final關(guān)鍵字final修飾變量,變量就變成了常量;final修飾方法,方法就不能再重寫(xiě);final修飾類(lèi),類(lèi)就不能再繼承。實(shí)例成員和類(lèi)成員用static關(guān)鍵詞修飾的成員,叫類(lèi)成員(靜態(tài)成員)。實(shí)例變量和類(lèi)變量
以static修飾的成員變量,叫類(lèi)變量;否則,叫實(shí)例變量。實(shí)例方法和類(lèi)方法
以static修飾的成員方法,叫類(lèi)方法;否則,叫實(shí)例方法。類(lèi)方法只允許調(diào)用類(lèi)方法,而不可以調(diào)用實(shí)例方法;實(shí)例方法卻可以調(diào)用類(lèi)方法或其他的實(shí)例方法。類(lèi)變量類(lèi)變量的生存期不依賴(lài)于對(duì)象,相當(dāng)于C語(yǔ)言中全局變量的作用。
publicclassCount{ privateint
serialNumber; privatestaticintcounter=0; publicCount(){ counter++;
serialNumber=conter; } }類(lèi)變量的使用
publicclassStaticVar{ publicstaticintnumber; } publicclassOtherClass{ publicvoidmethod(){
intx=StaticVar.number; } }類(lèi)方法的使用
publicclassGeneralFunction{ publicstaticint
addUp(int
x,inty){ returnx+y; } publicclassUseGeneral{ publicvoidmethod(){
inta=9;
intb=10;
intc=GeneralFunction.addUp(a,b); } }實(shí)例變量的使用
publicclassWrong{
intx; publicstaticvoidmain(Stringargs[]){ x=9; //compilererror } }抽象類(lèi)(abstractclass)用abstract關(guān)鍵字來(lái)修飾一個(gè)類(lèi)時(shí),這個(gè)類(lèi)叫做抽象類(lèi);用abstract來(lái)修飾一個(gè)方法時(shí),該方法叫做抽象方法。abstract類(lèi)必須被繼承,abstract方法必須被重寫(xiě)。抽象類(lèi)不能被實(shí)例化。抽象方法只需聲明,而不需實(shí)現(xiàn)。
abstractreturnType
abstractMethod([paramlist]);abstractclassA{ abstractvoidcallme(); voidmetoo(){
System.out.println("InsideA'smetoo()method"); }}classBextendsA{ voidcallme(){
System.out.println("InsideB'scallme()method"); }}publicclassAbstract{ publicstaticvoidmain(Stringargs[]){ Ac=newB();
c.callme();
c.metoo(); }}
運(yùn)行結(jié)果為:InsideB'scallme()methodInsideA'smetoo()method接口(interface)接口就是方法定義和常量值的集合。從本質(zhì)上講,接口是一種特殊的抽象類(lèi),這種抽象類(lèi)中只包含常量和方法的定義,而沒(méi)有變量和方法的實(shí)現(xiàn)。接口的作用通過(guò)接口可以實(shí)現(xiàn)不相關(guān)類(lèi)的相同行為,而不需要考慮這些類(lèi)之間的層次關(guān)系。通過(guò)接口可以指明多個(gè)類(lèi)需要實(shí)現(xiàn)的方法。通過(guò)接口可以了解對(duì)象的交互界面,而不需了解對(duì)象所對(duì)應(yīng)的類(lèi)。接口的定義[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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024年度個(gè)人住房貸款借款合同范本發(fā)布6篇
- 2024版二手房定金協(xié)議+房產(chǎn)評(píng)估服務(wù)合同3篇
- 2024版二手車(chē)個(gè)人買(mǎi)賣(mài)合同范本(含車(chē)輛交易安全)3篇
- 2024年度水泥制品行業(yè)標(biāo)準(zhǔn)化體系建設(shè)與實(shí)施合同3篇
- 2024年二零二四年度城市綠化樹(shù)木清理與景觀設(shè)計(jì)合同3篇
- 2024土地合作開(kāi)發(fā)合同-高科技產(chǎn)業(yè)基地土地合作開(kāi)發(fā)協(xié)議3篇
- 2024年度金融科技領(lǐng)域法律風(fēng)險(xiǎn)防控合同3篇
- 2024年度攝影師與活動(dòng)策劃公司合作合同3篇
- 2024年度技術(shù)創(chuàng)新:星巴克與谷歌合作開(kāi)展智能咖啡機(jī)研發(fā)合同3篇
- 2024年基站場(chǎng)地租賃合同書(shū)
- 現(xiàn)代教育技術(shù)智慧樹(shù)知到期末考試答案章節(jié)答案2024年濟(jì)寧學(xué)院
- 現(xiàn)代通信技術(shù)導(dǎo)論智慧樹(shù)知到期末考試答案章節(jié)答案2024年北京科技大學(xué)
- 英國(guó)簽證戶(hù)口本翻譯模板(共4頁(yè))
- 列管式換熱器設(shè)計(jì)課程設(shè)計(jì)說(shuō)明書(shū)
- 電鍍生產(chǎn)工序
- 初中語(yǔ)文課外古詩(shī)文董仲舒《春秋繁露》原文及翻譯
- (完整)(電子商務(wù)軟件研發(fā)及產(chǎn)業(yè)化建設(shè)項(xiàng)目)監(jiān)理月報(bào)(201202)
- 旅游出行安全告知書(shū)
- 一線員工技能等級(jí)評(píng)定方案
- 輸電線路鐵塔基礎(chǔ)施工質(zhì)量控制
評(píng)論
0/150
提交評(píng)論