java中特殊關鍵字_第1頁
java中特殊關鍵字_第2頁
java中特殊關鍵字_第3頁
java中特殊關鍵字_第4頁
java中特殊關鍵字_第5頁
已閱讀5頁,還剩26頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

ObjectorientedadvancedJava特殊關鍵學習及面向對象原理進階2目標掌握類的靜態(tài)成員:static掌握繼承的概念和用法:extends掌握抽象類的定義和用法:abstract掌握final關鍵字用法掌握接口的定義和用法:interface,implements多態(tài)例如了解包的使用:package3類的靜態(tài)成員類中的靜態(tài)變量、靜態(tài)方法或靜態(tài)代碼塊屬于類,而不屬于某個特定的對象。類的靜態(tài)成員可以與類的名稱一起使用,而無需創(chuàng)立類的對象。靜態(tài)變量或方法也稱為類的變量或方法。用static修飾符修飾,可以是變量、方法或代碼塊4靜態(tài)變量不管創(chuàng)立了類的多少實例,整個類中靜態(tài)變量的副本只有一個。引用靜態(tài)變量的方法:通過引用類的任一實例通過類的名稱〔建議〕classA{staticintx=0;

A(){x++;}}Aa1=newA();Aa2=newA();a1.x=100;a2.x=200;inty=a1.x;

通過類實例訪問不是一個好方法Aa1=newA();Aa2=newA();A.x=100;A.x=200;inty=A.x;

聲明為static的變量實質上就是全局變量通過類名訪問5靜態(tài)方法與靜態(tài)方法相關的幾個要點:類的靜態(tài)方法只能訪問其他的靜態(tài)成員靜態(tài)方法沒有this靜態(tài)方法不能被覆蓋(重寫)為非靜態(tài)方法classA{staticinti=10;intj;

staticvoidsetValue(intx){

j=x;//出錯

System.out.println(""+i);}}不能訪問非靜態(tài)變量j,可以訪問靜態(tài)變量iclassB{staticvoidtest(){}}classCextendsB{

voidtest(){}//出錯}

6靜態(tài)塊如果需要通過計算來初始化靜態(tài)變量,可以聲明一個靜態(tài)塊。靜態(tài)塊僅在該類被加載時執(zhí)行一次。只能初始化類的靜態(tài)數據成員。

classA{

staticintx;//靜態(tài)成員

inty;//非靜態(tài)成員

static{

x=1; y=1; System.out.println("staticblock:"+x);}}

7被繼承的類稱為父類繼承父類的類稱為子類執(zhí)行繼承時,子類將獲得父類的屬性,并具有自身特有的屬性。

Emoloyee類:namesexWorker類:categorydressAllowanceOfficer類:empClassvehicle職員類,具有姓名和性別兩個屬性工人類,繼承了父類的姓名和性別屬性外還包含類別和是否有服裝津貼屬性主任類,還包含級別和是否配備交通工具屬性繼承繼承是面向對象編程技術的一塊基石,它允許創(chuàng)立分等級層次的類。運用繼承,可以創(chuàng)立一個通用類定義一系列一般特性。該類可以被更具體的類繼承。8extends關鍵字extends關鍵字用于繼承類。聲明一個繼承父類的類的通常形式如下:classsubclass-nameextendssuperclass-name{//類體}

沒有extends,默認父類為Object只能有一個父類,即單繼承子類繼承父類的public和protected成員注意9super關鍵字super關鍵字用來解決如何直接訪問或初始化從父類繼承來的屬性。super有兩種通用形式:調用父類的構造函數,將構造細節(jié)通過繼承鏈往上傳遞。注意:

super()(或其重載的構造函數)必須是在子類構造函數中的第一個執(zhí)行語句。訪問被子類成員覆蓋(重寫)的父類成員(成員變量和成員方法)。10繼承例如classEmployee{

Stringname;//姓名

charsex;//性別

Employee(Stringn,chars){name=n;sex=s;}publicStringgetName(){returnname;}publicchargetSex(){returnsex;}}classWorkerextendsEmployee

{

charcategory;//類別

booleandressAllowance;//是否提供服裝津貼Worker(Stringn,chars,charc,booleand){

super(n,s);

category=c;dressAllowance=d;}publicchargetCategory(){returncategory;}

publicbooleangetAll(){returndressAllowance;}}classInheDemo{publicstaticvoidmain(Stringargs[]){Workerw=newWorker("M.John",'M','B',true);

System.out.println("工人信息");

System.out.println("姓名

:"+w.getName());System.out.println("性別

:"+w.getSex());

System.out.println("類別

:"+w.getCategory());if(w.getAll())System.out.println("提供服裝津貼");

elseSystem.out.println(“未提供服裝津貼”);}}11方法覆蓋〔override〕方法覆蓋是Java實現(xiàn)多態(tài)性機制的另一種方式。在類層次結構中,如果子類中的一個方法與父類中的方法有相同的方法名并具有相同數量和類型的參數列表,這種情況稱為方法覆蓋〔重寫〕。當一個覆蓋方法通過父類引用被調用,Java根據當前被引用對象的類型來決定執(zhí)行哪個版本的方法??梢酝ㄟ^super關鍵字調用直屬父類中被覆蓋的方法版本。12方法覆蓋例如classSuperClass{inta;SuperClass(){a=10;}

publicvoidprintA(){System.out.println("父類中a="+a);}}classSubClassextendsSuperClass{inta;SubClass(inta){this.a=a;}

publicvoidprintA(){System.out.println("子類中a="+a);}}

publicclassOverrideDemo{publicstaticvoidmain(Stringargs[]){SuperClasss1=newSubClass(20);

s1.printA();}}將調用子類的printA方法13instanceof關鍵字classStudent{}classGraduateextendsStudent{}classUndergraduateStudentextendsStudent{}publicclassst{publicstaticvoidmain(String[]args){UndergraduateStudents1=newUndergraduateStudent();Graduates2=newGraduate();Studentx;

x=s1;if(xinstanceofUndergraduateStudent)System.out.println(“x是UndergraduateStudent類的實例?!?;elseSystem.out.println(“x是Graduate類的實例。”);}}instanceof測試第一個參數的運行時類型是否為與第二個參數兼容的賦值。x在運行時指向s1,所以if語句條件返回true14Object類Object類是類體系結構的根Java系統(tǒng)中的每個類都是Object類直接或間接的子類Object類包括在java.lang包中此類定義了所有對象都具備的根本狀態(tài)和行為可以用類型為Object的變量來引用任意類型的對象所以任何對象使用instanceofObject返回的結果都為真!15類型轉換執(zhí)行自動類型轉換需要兩個條件:接受轉換的兩種類型是兼容的目的類型數的范圍比源類型的大強制類型轉換語句的通用格式如下:〔目標類型〕valueUndergraduateStudents1=newUndergraduateStudent();

Graduates2=newGraduate();Studentx;x=s1;Graduates3=newGraduate();if(xinstanceofGraduate)

s3=(Graduate)x;注意:從父類到子類的轉換,建議在轉換前判斷父類是否指向子類的對象byte->short->int->long->float->double16抽象類定義抽象類的目的是提供可由其子類共享的一般形式。子類可以根據自身需要擴展抽象類。抽象類不能實例化。抽象方法沒有函數體。抽象方法必須在子類中給出具體實現(xiàn)。abstract修飾符可與類和方法一起使用17抽象類在以下情況下,某個類將成為抽象類直接定義為abstract當一個類的一個或多個方法為抽象方法時。當該類為一個抽象類的子類,并且沒有為所有抽象方法提供實現(xiàn)細節(jié)或方法主體時。當一個類實現(xiàn)一個接口,并且沒有為所有抽象方法提供實現(xiàn)細節(jié)或方法主體時。18抽象類例如abstractclassEmployee{ intbasic=2000;

abstractvoidsalary();//抽象方法}classManagerextendsEmployee{voidsalary(){ System.out.println("薪資等于"+basic*5);}}

classWorkerextendsEmployee{voidsalary(){ System.out.println("薪資等于"+basic*2);}}

抽象方法沒有方法主體在子類中提供實現(xiàn)在子類中提供實現(xiàn)19final關鍵字/final類final修飾符可應用于類、方法和變量。final在應用于類、方法和變量時意義是不同的,但本質是一樣的:final表示不可改變。聲明為final的類不能被繼承。final類例如:

finalclassTestFinal{inti=7;intj=1;voidf(){}}

classFurtherextendsTestFinal{}

final類不能被繼承有繼承就有進化!而final關鍵字代表進化終止!20final方法在方法聲明中使用final關鍵字向編譯器說明子類不能覆蓋此方法。在聲明類中,一個final方法只被實現(xiàn)一次。如果一個類為final類,那么它的所有方法都為隱式的final方法。classTestFinal{finalvoidf(){}}

classFurtherextendsTestFinal{finalvoidf(){}}

final方法不能被覆蓋21final變量一個變量可以聲明為final,這樣做的目的是阻止它的內容被修改。聲明final變量后,只能被初始化一次,然后就不能對其值進行修改。一個final變量實質上是一個常量。

classFinalDemo{ publicstaticvoidmain(Stringargs[]){finalintnoChange=20;

noChange=30;

}}

final變量不能被修改22接口一個接口可以從幾個接口繼承一個類可實現(xiàn)幾個接口。Java程序一次只能繼承一個類但可以實現(xiàn)幾個接口。接口不能有任何具體的方法。接口也可用來定義可由類使用的一組常量,類型只能是publicstaticfinal,即為默認類型。接口提供“isa”關系。接口是一套標準和標準,沒有具體的實現(xiàn)細節(jié),只有常量和公有抽象方法。23創(chuàng)立接口//有方法的接口publicinterfacemyinterface{ publicvoidadd(intx,inty); publicvoidvolume(intx,inty,intz);}//定義程序使用的常量的接口publicinterfacemyconstants{ publicstaticfinaldoubleprice=1450.00;publicstaticfinalintcounter=5;}

定義一個接口:24創(chuàng)立接口用關鍵字implements實現(xiàn)接口,例如:classdemoimplementsmyinterface如果有一個以上接口被實現(xiàn),那么用逗號隔開接口名稱,如下所示:classdemoimplementsMycalc,Mycount25接口使用例如interfaceA{doubleg=9.8;voidshow();}classInterfaceTest{publicstaticvoidmain(Stringargs[]){Bb=newB();b.show();}}classBimplementsA{publicvoidshow(){System.out.println(“g=“+g);}}26多態(tài)在面向對象程序設計中,多態(tài)性原那么是一個根本的設計原那么所謂多態(tài)就是針對不同的對象發(fā)同樣的消息,這些對象的響應是不一樣的。多態(tài)在生物界表現(xiàn)出來的就是生物多樣性。多態(tài)例如程序演示AnimalHumanDogFishCatSwimmer27包package包可以是類、接口和子包的集合在Java中,包主要有以下用途:集合相關的類和接口有助于防止命名沖突訪問控制:保護類、數據和方法package語句特性:放在第一句每個源文件最多只能一個包名應小寫創(chuàng)立包的組織或團體的反向域名命名以java.*和javax.*開頭的包名被保存28使用包定義包

packagemypackage;

訪問Java包

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論