第三章面向?qū)ο蟾呒?jí)特性_第1頁
第三章面向?qū)ο蟾呒?jí)特性_第2頁
第三章面向?qū)ο蟾呒?jí)特性_第3頁
第三章面向?qū)ο蟾呒?jí)特性_第4頁
第三章面向?qū)ο蟾呒?jí)特性_第5頁
已閱讀5頁,還剩98頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

第三章面向?qū)ο蟾呒?jí)特性本章要點(diǎn)類的繼承繼承的規(guī)則子類的構(gòu)造方法方法的覆蓋final關(guān)鍵字接口接口的規(guī)范引用數(shù)據(jù)類型的轉(zhuǎn)換多態(tài)Java中的包包和訪問權(quán)限修飾符類的封裝和內(nèi)部類主要內(nèi)容類的繼承1接口2Java中的包3類的封裝和內(nèi)部類4類的繼承類的繼承在Java中定義一個(gè)類時(shí),讓該類通過關(guān)鍵字extends繼承一個(gè)已有的類,這就是類的繼承被繼承的類稱為父類(超類,基類),新的類稱為子類(派生類)。子類繼承父類的所有屬性和方法,同時(shí)也可以增加自己的屬性和方法。使用繼承假如你在為某個(gè)公司做一個(gè)企業(yè)管理軟件,來管理企業(yè)的雇員,比如:

工人(Worker)有姓名、出生日期和薪酬屬性,需要獲得名字、年齡、薪酬和服裝津貼;

主任(Officer)同樣包含姓名、出生日期和薪酬屬性,另外還有一個(gè)department(他所管理的部門),同樣他也有獲得姓名、年齡和薪酬的方法,還有一個(gè)獲得交通補(bǔ)助的方法。你怎么做?繼承是利用現(xiàn)有的類創(chuàng)建新類的過程,現(xiàn)有的類稱作基類(或父類),創(chuàng)建的新類稱作派生類(子類)。Java中所有的類都是通過直接或間接地繼承java.lang.Object類得到的。在Java中定義一個(gè)類時(shí),讓該類通過關(guān)鍵字extends繼承一個(gè)已有的類,這就是類的繼承基類方法和屬性派生類基類方法+

附加方法類的繼承繼承的語法

示例Employee.java

Worker.java

[修飾符]class子類名extends

父類名類的繼承繼承的語法?練習(xí)Officer.javaTestOfficer.java用java中類的繼承機(jī)制,實(shí)現(xiàn)Officer類,并設(shè)計(jì)一個(gè)測(cè)試程序TestOfficer類,來訪問Officer類繼承的好處實(shí)現(xiàn)類的重用易維護(hù)類的繼承繼承的規(guī)則Java中只支持單繼承,也就是說每個(gè)類只能有一個(gè)父類,不允許有多重繼承一個(gè)父類可以有多個(gè)子類子類繼承父類所有的屬性和方法,但不繼承父類的構(gòu)造方法

示例

TestWorker.java類的繼承子類的構(gòu)造方法—

子類不能繼承父類的構(gòu)造方法使用默認(rèn)的構(gòu)造方法在子類中的創(chuàng)建構(gòu)造方法示例

Worker.java在子類中創(chuàng)建構(gòu)造方法時(shí),必須調(diào)用父類的構(gòu)造方法子類可以在自己的構(gòu)造方法中使用super關(guān)鍵字來調(diào)用父類的構(gòu)造方法如果使用super關(guān)鍵字調(diào)用父類構(gòu)造方法,必須寫在該子類構(gòu)造方法的第一行如調(diào)用的是父類中無參的構(gòu)造方法,則可以不寫super()如果子類中調(diào)用了父類無參的構(gòu)造方法,而父類中沒有無參構(gòu)造方法則系統(tǒng)編譯出錯(cuò)super(參數(shù)1,參數(shù)2,…);案例classPoint{//定義"點(diǎn)"類

//x軸坐標(biāo)和y軸坐標(biāo),由于準(zhǔn)備用于繼承,故修飾為protected

protected

floatmX,mY;

publicPoint(floatx,floaty){//構(gòu)造方法

mX=x;mY=y;}}classCircleextendsPoint{//定義"圓"類繼承于"點(diǎn)"類

protected

floatmRadius;//半徑

publicCircle(floatr){//構(gòu)造方法

mRadius=r;}}public

classDemo{

public

static

voidmain(String[]args){Circlec=newCircle(2.5f);//實(shí)例化"圓"類對(duì)象

}}本例將報(bào)出錯(cuò)誤構(gòu)造方法的執(zhí)行順序當(dāng)實(shí)例化子類的對(duì)象時(shí),必須先執(zhí)行父類的構(gòu)造方法,然后再執(zhí)行子類的構(gòu)造方法;如果父類還有更上級(jí)的父類,就會(huì)先調(diào)用最高父類的構(gòu)造方法,再逐個(gè)依次地將所有繼承關(guān)系的父類構(gòu)造方法全部執(zhí)行;如果父類的構(gòu)造方法執(zhí)行失敗,那么子類的對(duì)象也將無法實(shí)例化。super關(guān)鍵字調(diào)用父類的方法publicclassSoftwareTeacherextendsTeacher{publicSoftwareTeacher

(StringmyName,StringmyCenter){super(myName,myCenter);}}子類的構(gòu)造方法中,通過super關(guān)鍵字調(diào)用父類的構(gòu)造方法方法重寫后,通過super關(guān)鍵字調(diào)用父類的普通方法publicclassSoftwareTeacher

extendsTeacher{publicvoidgiveLesson(){System.out.println("使用電腦授課");super.giveLesson();}}通過調(diào)用父類的構(gòu)造方法,完成對(duì)屬性值的初始化通過調(diào)用父類的普通方法,完成部分功能super總結(jié)調(diào)用父類的構(gòu)造函數(shù)super(parametersopt)調(diào)用父類的構(gòu)造函數(shù)。必須是子類構(gòu)造函數(shù)的第一條語句。如果子類中沒有顯式地調(diào)用父類的構(gòu)造函數(shù),那么將自動(dòng)調(diào)用父類不帶參數(shù)的構(gòu)造函數(shù)。父類的構(gòu)造函數(shù)在子類構(gòu)造函數(shù)之前執(zhí)行。調(diào)用父類的成員super.datasuper.method(parameters)類的繼承給定以下代碼:下列描述哪些是正確的_____?A.編譯失敗B.代碼正常運(yùn)行

C.在第7行拋出異常D.在第2行拋出異常答案:A類的繼承?練習(xí)Officer.java在Officer類中,創(chuàng)建一個(gè)構(gòu)造方法,要求在調(diào)用該構(gòu)造方法時(shí),可以對(duì)name、birth、salary、department屬性賦初值類的繼承方法的覆蓋(override)

重寫(rewrite)對(duì)從父類中繼承來的方法進(jìn)行改造在子類繼承父類時(shí)發(fā)生示例TestOffice_1.java方法覆蓋的規(guī)則在子類中的覆蓋方法與父類中被覆蓋的方法應(yīng)具有相同的方法名相同的參數(shù)列表(參數(shù)數(shù)量、參數(shù)類型、參數(shù)順序都要相同)相同的返回值類型子類覆蓋方法的訪問權(quán)限要不小于父類中被覆蓋方法的訪問權(quán)限

類的繼承?練習(xí)給定類,在其子類中下列哪些覆蓋方法可以正確的聲明_____classA{intmethod1(inta,doubleb){return0;}A.

intmethod1(inta,doubleb){return1;}B.

intmethod1(inta,longb){return1;}C.intmethod1(intb,doublea){return1;}D.

shortmethod1(inta,doubleb){return1:}E.

intmethod1(doubleb,inta){return1;}

答案:AC類的繼承?練習(xí)給定下列代碼:當(dāng)在第6行加入什么方法時(shí)會(huì)引起編譯錯(cuò)誤?答案:B方法覆蓋注意僅當(dāng)方法是可訪問的實(shí)例方法時(shí),才能被覆蓋,即私有方法不能被覆蓋。靜態(tài)方法不能被覆蓋,如果靜態(tài)方法在子類中重新定義,那么父類方法將被隱藏。一旦父類中的方法被覆蓋,則不能從子類外部訪問被覆蓋的方法。在子類中可以使用super引用被覆蓋的方法。重寫(覆蓋)與重載方法的重載:定義有相同名字,但參數(shù)不同的多個(gè)方法構(gòu)成重載方法的重寫:方法的重寫必須和被重寫的方法具有相同的名字,參數(shù),返回值類型。構(gòu)造方法也可以重載。類的繼承final關(guān)鍵字final可以修飾的元素:類:不能被繼承變量(屬性和局部變量):不能被重新賦值在聲明的同時(shí)賦值系統(tǒng)不會(huì)對(duì)final屬性默認(rèn)的賦初始值方法:不能在子類中被覆蓋,即不能修改。

1.final修飾成員變量final修飾變量,則成為常量,例如

finaltypevariableName;修飾成員變量時(shí),定義時(shí)同時(shí)給出初始值,而修飾局部變量時(shí)不做要求。

2.final修飾成員方法final修飾方法,則該方法不能被子類重寫。finalreturnTypemethodName(paramList){…}3.final類final修飾類,則類不能被繼承。如果一個(gè)類被final關(guān)鍵字修飾,說明這個(gè)類不能再被其他類所繼承,該類被稱為最終類。

finalclassfinalClassName{

}

在默認(rèn)情況下,所有的成員變量或成員方法都可以被隱藏或重寫,如果父類的成員不希望被子類的成員所隱藏或重寫則將其聲明為final。classep4_12_a{ staticfinaldoublepi=3.1415926;//聲明靜態(tài)常量

publicfinalvoidf(){//聲明最終方法

System.out.println("pi="+pi); }}classep4_12_bextendsep4_12_a{ intnum=100; privatevoidf(){//出錯(cuò),不可覆蓋父類的最終方法

System.out.println("num="+num); }}classep4_12{ publicstaticvoidmain(Stringargs[]){ ep4_12_bOne=newep4_12_b(); One.f(); }}練習(xí)?練習(xí)Shape.javaRect.javaCircle.javaSquare.javaTestShape.java設(shè)計(jì)一個(gè)形狀類:屬性:周長(zhǎng)和面積;方法:求周長(zhǎng)和求面積形狀類的子類:Rect(矩形),Circle(圓形)Rect類的子類:Square(正方形)不同的子類會(huì)有不同的構(gòu)造方法及計(jì)算周長(zhǎng)和面積的方法寫一個(gè)測(cè)試類,在main方法中創(chuàng)建三個(gè)不同的形狀對(duì)象,放在Shape類型的數(shù)組里,分別打印出每個(gè)對(duì)象的周長(zhǎng)和面積Contents類的繼承1接口2Java中的包3類的封裝和內(nèi)部類4接口(interface)抽象方法只有方法聲明,沒有方法實(shí)現(xiàn)的方法[訪問權(quán)限修飾符]abstract返回值類型

抽象方法名(參數(shù)列表);classA{

abstractintmethod1(inta,intb);}構(gòu)造方法、靜態(tài)方法、私有方法、final方法不能被聲明為抽象的方法。接口(interface)抽象類抽象類是抽象方法和非抽象方法的集合特殊情況全部是抽象方法全部為非抽象方法[訪問權(quán)限修飾符]abstractclass類名{……}

abtractclassA{Stringname;

abstractintmethod1(inta,intb);

voidsayHi(){System.out.println(“Hello!”);}接口(interface)抽象類注意:抽象類不能被實(shí)例化;其包含的抽象方法必須在其子類中被實(shí)現(xiàn),否則該子類只能聲明為abstract;抽象方法不能為static;如果從一個(gè)抽象類繼承,并想創(chuàng)建該新類的對(duì)象,那么我們就必須為基類中的所有抽象方法提供方法定義。在下列情況下,一個(gè)類必須聲明為抽象類:

當(dāng)一個(gè)類的一個(gè)或多個(gè)方法是抽象方法時(shí);當(dāng)類是一個(gè)抽象類的子類,并且沒有實(shí)現(xiàn)父類的所有抽象方法,即只實(shí)現(xiàn)部分;當(dāng)一個(gè)類實(shí)現(xiàn)一個(gè)接口,并且不能為全部抽象方法都提供實(shí)現(xiàn)時(shí);抽象類的使用——?jiǎng)?chuàng)建抽象類的對(duì)象創(chuàng)建抽象類的對(duì)象–擴(kuò)展抽象類,實(shí)現(xiàn)其所有抽象方法–創(chuàng)建該抽象類子類的對(duì)象31抽象類例子publicclassCircleextendsShape{publicvoiddraw(){System.out.println("drawacircle....");}}TestShape.javapublicstaticvoidmain(String[]args){

//Shapeshape=newShape();//error,shape是一個(gè)抽象類

Shapeshape=newCircle();shape.draw();System.out.println(shape.getArea());}32publicabstractclassShape{/**畫出自己*/

publicabstractvoiddraw();/**得到面積*/publicdoublegetArea(){return100.0;}}可行嗎?接口(interface)?練習(xí)給定以下代碼:

執(zhí)行下列哪些操作后,可以讓代碼通過編譯?對(duì)methodA方法添加方法體將5~7行,用“;”代替刪除class前的abstract關(guān)鍵字刪除methodA方法前的abstract關(guān)鍵字刪除methodB方法前的abstract關(guān)鍵字答案:BE接口(interface)?練習(xí)Animal.javaFish.java按下面的類圖,創(chuàng)建一個(gè)抽象類,該抽象類有字符串類型的eyecolor屬性抽象方法stayIn,返回值類型為void方法showEye,返回值類型String接口(interface)接口的聲明接口是一種特殊的抽象類,這種抽象類中只包含常量和抽象方法,而沒有變量和方法的實(shí)現(xiàn)接口的成員:常量(字段)抽象方法[訪問權(quán)限修飾符]interface接口名

{

接口的成員}接口(interface)接口的聲明注意:接口不是一個(gè)類,沒有構(gòu)造方法,不能被實(shí)例化接口使用interface關(guān)鍵字來定義,而不是class接口默認(rèn):常量:publicstaticfinal抽象方法:publicabstractinterfaceRunnable{publicabstractvoidrun();}接口(interface)?練習(xí)給定以下代碼:下列選項(xiàng)中,哪些選項(xiàng)可以用來替代第2行代碼?finalintk=4;Publicintk=4;Staticintk=4;Privateintk=4;Abstractintk=4;答案:ABC接口(interface)?練習(xí)

下列選項(xiàng)中,哪些可以定義在一個(gè)接口中?答案:AB接口(interface)?練習(xí)VideoDevice.javaAudioDevice.java定義一個(gè)接口VideoDevice,表示可視設(shè)備,該接口中有:MIN_BRITGHTNESS常量,其值為10,表示最小亮度打開方法:turnOn()關(guān)閉方法:turnOff()定義一個(gè)接口AudioDevice,表示可視設(shè)備,該接口中有:MIN_VOLUME常量,其值為5,表示最小音量打開方法:turnOn()關(guān)閉方法:turnOff()調(diào)節(jié)音量方法:turnVolume(intvolume)接口(interface)extendsinterfaceAextendsB{}interfaceinterfaceinterfaceextendsinterfaceAextendsB,C,D

{}interfaceextends

擴(kuò)展接口(接口的繼承)接口(interface)類實(shí)現(xiàn)接口—implements為了使用一個(gè)接口,你要編寫實(shí)現(xiàn)接口的類如果一個(gè)類要實(shí)現(xiàn)一個(gè)接口,那么這個(gè)類就必須實(shí)現(xiàn)接口中所有抽象方法。否則這個(gè)類只能聲明為抽象類多個(gè)無關(guān)的類可以實(shí)現(xiàn)一個(gè)接口,一個(gè)類可以實(shí)現(xiàn)多個(gè)無關(guān)的接口一個(gè)類可以在繼承一個(gè)父類的同時(shí),實(shí)現(xiàn)一個(gè)或多個(gè)接口接口(interface)

?練習(xí)

Runnable.javaBird.javaFlyable.java根據(jù)以下類圖實(shí)現(xiàn)Runnable接口和Fylable接口設(shè)計(jì)一個(gè)類Bird,類Bird實(shí)現(xiàn)了以上兩個(gè)接口,并設(shè)計(jì)一個(gè)main(),測(cè)試Bird類,得到以下測(cè)試結(jié)果Thebirdisrunningwithitsfeet!Thebirdisflyingwithitswings!接口(interface)

類的單繼承與多實(shí)現(xiàn)接口(interface)類實(shí)現(xiàn)接口?練習(xí)Student.javaConsumer.javaPerson.java創(chuàng)建一個(gè)Student類該類繼承了Person類,并實(shí)現(xiàn)了Consumer接口該類具有String類型的屬性school并有一個(gè)study方法,在該方法中,系統(tǒng)可打印出學(xué)生在那所學(xué)校學(xué)習(xí)并創(chuàng)建一個(gè)測(cè)試方法,測(cè)試Student類接口(interface)接口的意義:接口可以實(shí)現(xiàn)多繼承:用接口可以實(shí)現(xiàn)混合類型(主類型,副類型),java中可以通過接口分出主次類型主類型使用繼承,副類型,使用接口實(shí)現(xiàn)接口可以使方法的定義和實(shí)現(xiàn)相分離,降低模塊間或系統(tǒng)間的耦合性針對(duì)接口編程可以屏蔽不同實(shí)現(xiàn)間的差異,看到的只是實(shí)現(xiàn)好的功能。接口(interface)classCatextendsAnimalimplementsRunnable{}?練習(xí)

Cat.javaTestCat.java

編寫代碼實(shí)現(xiàn)以下類的關(guān)系其中,Cat有:屬性:furcolor(毛的顏色)、name(名字)構(gòu)造方法:一個(gè)有參的構(gòu)造方法,可以滿足在創(chuàng)建對(duì)象的同時(shí),為其名字屬性賦初值一個(gè)無參的構(gòu)造方法方法:climbTree(),調(diào)用該方法將打印“Icouldclimbtree!”接口(interface)引用數(shù)據(jù)類型的轉(zhuǎn)換(對(duì)象造型)示例:TestStudent.java向上轉(zhuǎn)型(Upcasting)—子類轉(zhuǎn)換為父類,自動(dòng)轉(zhuǎn)換;前提—具有繼承或?qū)崿F(xiàn)關(guān)系向上轉(zhuǎn)換損失了子類新擴(kuò)展的屬性和方法僅可以使用從父類中繼承的屬性和方法接口(interface)引用數(shù)據(jù)類型的轉(zhuǎn)換示例:TestStudent.java向下轉(zhuǎn)型(Downcasting):強(qiáng)制轉(zhuǎn)換將父類對(duì)象顯示的轉(zhuǎn)換成子類類型。Animala=newCat();Catc=(Cat)a;接口(interface)instanceof運(yùn)算符判斷一個(gè)類是否實(shí)現(xiàn)了某個(gè)接口判斷一個(gè)實(shí)例對(duì)象是否屬于一個(gè)類它的返回值是boolean型的

對(duì)象

instanceof

接口

對(duì)象

instanceof

類多態(tài)引入實(shí)例開發(fā)教員類,其中教員分為Java教員以及.NET教員,各自的要求如下:Java教員屬性:姓名,所屬中心方法:授課(步驟:打開Eclipse,實(shí)施理論課授課),自我介紹.NET教員屬性:姓名,所屬中心方法:授課(步驟:打開VS,實(shí)施理論課授課),自我介紹代碼:TestTeacher.java為什么需要使用多態(tài)在教員類的基礎(chǔ)上,開發(fā)一個(gè)類代表總部,負(fù)責(zé)對(duì)各教員進(jìn)行評(píng)估,評(píng)估的內(nèi)容包括:1、教員的自我介紹;2、教員的授課;解決方法一:TestTeacherDuo_1.java前一方法存在的問題:違反了open-close原則

當(dāng)一個(gè)軟件的需求發(fā)生改變時(shí),我們能夠以添加新的代碼的方式,而不是修改原來代碼的方式來適應(yīng)需求的更改,如晨能做到這一點(diǎn),就滿足open-close原則。第二種解決方案——多態(tài)TestTeacherDuo_2.java多態(tài)(動(dòng)態(tài)綁定、晚綁定Polymorphism

)一個(gè)對(duì)象具有多種特征,根據(jù)不同的情況來做出不同的響應(yīng)當(dāng)調(diào)用實(shí)例方法時(shí),由Java虛擬機(jī)動(dòng)態(tài)地決定所調(diào)用的方法,稱為動(dòng)態(tài)綁定(dynamicbinding)或?yàn)槎鄳B(tài)(polymorphism)。如何實(shí)現(xiàn)多態(tài)publicclassTeacher{publicvoidgiveLesson(){

System.out.println("知識(shí)點(diǎn)講解");}}publicclassTest{publicstaticvoidmain(String[]args){SchoolManagersm=newSchoolManager();

sm.manage(newSoftwareTeacher());}}3publicclassSoftwareTeacher

extendsTeacher{

publicvoidgiveLesson(){

System.out.println("使用電腦授課");

super.giveLesson();

}}1publicclassSchoolManager{publicvoidmanage(Teachert){

t.giveLesson();

}}2三個(gè)條件:1)要有方法的重寫2)要有繼承/實(shí)現(xiàn)4)父類引用指向子類對(duì)象在Java語言中,多態(tài)性的實(shí)現(xiàn)有兩種方式:1、覆蓋實(shí)現(xiàn)多態(tài)性——?jiǎng)討B(tài)多態(tài)2、重載實(shí)現(xiàn)多態(tài)性——靜態(tài)多態(tài)多態(tài)的優(yōu)點(diǎn)簡(jiǎn)化代碼改善代碼的組織性和可讀性易于擴(kuò)展多態(tài)為什么可以這樣做子類可以無條件的給父類賦值,而且永遠(yuǎn)是安全的,但父類給子類賦值是危險(xiǎn)的。給定如下Java代碼,編譯運(yùn)行后,輸出結(jié)果是什么classBase{publicStringname;publicBase(){name="Base";}publicBase(StringpName){name=pName;}publicvoidmethod(){System.out.println(name);}}classChildextendsBase{publicChild(){super("Child1");name="Child2";}}publicclassSample{publicstaticvoidmain(String[]args){

Childc=newChild();c.method();

}}

Child2控制臺(tái)輸出123課外練習(xí)?練習(xí)Cola公司的雇員分為以下若干類:ColaEmployee:這是所有員工總的父類,屬性:?jiǎn)T工的姓名,員工的生日月份。方法:getSalary(intmonth)根據(jù)參數(shù)月份來確定工資,如果該月員工過生日,則公司會(huì)額外獎(jiǎng)勵(lì)100元。SalariedEmployee:Employee的子類,拿固定工資的員工。屬性:月薪HourlyEmployee:Employee的子類,按小時(shí)拿工資的員工,每月工作超出160小時(shí)的部分按照1.5倍工資發(fā)放。屬性:每小時(shí)的工資、每月工作的小時(shí)數(shù)練習(xí)?練習(xí)SalesEmployee:Employee的子類,銷售人員,工資由月銷售額和提成率決定。屬性:月銷售額、提成率定義一個(gè)類Company,在該類中寫一個(gè)函數(shù),調(diào)用該函數(shù)可以打印出某月某個(gè)員工的工資數(shù)額,寫一個(gè)main方法,把若干各種類型的員工放在一個(gè)ColaEmployee數(shù)組里,并單元出數(shù)組中每個(gè)員工當(dāng)月的工資Contents類的繼承1接口2Java中的包3類的封裝和內(nèi)部類4Java中的包包的概念及應(yīng)用在Java中,包主要有以下用途:包允許將類組合成較小的單元有助于避免命名沖突

包允許在更廣的范圍內(nèi)保護(hù)類、數(shù)據(jù)和方法包可以是類、接口和子包的集合Java中的包包的概念及應(yīng)用將類放入包中

注意:在java中位于包中的類,在文件系統(tǒng)中的存放位置,必須有與包名層次相對(duì)應(yīng)的目錄結(jié)構(gòu)package語句作為java源文件的第一條語句每個(gè)源文件只能聲明一個(gè)包如果沒有package語句,則默認(rèn)為無名包

package

包名;Java中的包訪問其它包中的類使用包名.類名前綴使用import關(guān)鍵字引入其它包中的類位于同一包中的類可以直接訪問packagetest;importp08.Animal;classCatextendsAnimal{…}CardClass.P200_Cardmy200=newardClass.P200_Card();System.out.println(my200.toString());Java中的包訪問其他包中的類導(dǎo)入包中所有的類導(dǎo)入子包中所有的類導(dǎo)入包中的某個(gè)類

import

包名.*;

import

包名.子包名.*;

import

包名.子包名.類名;常用包(一)1.java.lang包該包是Java語言的核心類庫,包含了運(yùn)行Java程序必不可少的系統(tǒng)類,如基本數(shù)據(jù)類型、基本數(shù)學(xué)函數(shù)、字符串處理、線程、異常處理類等。每個(gè)Java程序運(yùn)行時(shí),系統(tǒng)都會(huì)自動(dòng)引入java.lang包,所以這個(gè)包的加載是缺省的。2.java.io包該包是Java語言的標(biāo)準(zhǔn)輸入/輸出類庫,包含了實(shí)現(xiàn)Java程序與操作系統(tǒng)、用戶界面以及其它Java程序做數(shù)據(jù)交換所使用的類。如基本輸入/輸出流、文件輸入/輸出流、過濾輸入/輸出流、管道輸入/輸出流、隨機(jī)輸入/輸出流等。

常用包(二)3.java.util包

該包包含了Java語言中的一些低級(jí)的使用工具,如處理時(shí)間的Date類、處理變長(zhǎng)數(shù)組的Vector類,實(shí)現(xiàn)棧和散列表的Stack類和HashTable類等。4.java.awt包

該包是Java語言用來構(gòu)建圖形用戶界面(GUI)的類庫,它包括了許多界面元素和資源,主要提供三方面的支持:低級(jí)繪圖操作,如Graphics類等;圖形界面組件和布局管理,如Checkbox類、Container類、LayoutManager接口等;界面用戶交互控制和事件響應(yīng),如Event類。

常用包(三)5.java.awt.image包

該包用來處理和操縱來自網(wǎng)上的圖片的Java工具類庫。6.java.awt.peer包該包的作用是使同一個(gè)Java程序在不同的軟、硬件平臺(tái)上運(yùn)行時(shí),具有相同的用戶界面;它是程序代碼和平臺(tái)之間的中介,將不同的平臺(tái)包裹、隱藏起來,使之在用戶面前呈現(xiàn)相同的面貌;該包是實(shí)現(xiàn)Java語言跨平臺(tái)特性的手段之一。常用包(四)7.java.applet包

該包是用來實(shí)現(xiàn)運(yùn)行于Internet瀏覽器中的JavaApplet的工具類庫,它僅包含少量的幾個(gè)接口和一個(gè)非常有用的類:java.applet.Applet。8.包

該包是Java語言用來實(shí)現(xiàn)網(wǎng)絡(luò)功能的類庫,主要包括:底層的網(wǎng)絡(luò)通信,如Socket類、ServerSocket類;編寫用戶自己的Telnet、FTP、郵件服務(wù)等實(shí)現(xiàn)網(wǎng)上服務(wù)的類;用于訪問Internet上資源和進(jìn)行CGI網(wǎng)關(guān)調(diào)用的類,如URL等。

Java中的包把自己的類打包使用java命令行參數(shù)jar-cvfanimal.jar*.*Java中的包訪問權(quán)限修飾符用來控制類的成員和類的使用范圍類成員的訪問權(quán)限修飾符:private、default、protected、public類的訪問權(quán)限修飾符:public、default

privatedefaultprotectedpublic同一類√√√√同一包中的類√√√不同包中的子類√√其他包中的類√Java中的包訪問權(quán)限修飾符課堂練習(xí)1、下列關(guān)于變量的敘述哪個(gè)是錯(cuò)的?()A.實(shí)例變量是類的成員變量。B.在方法中定義的局部變量在該方法被執(zhí)行時(shí)創(chuàng)建。C.實(shí)例變量用關(guān)鍵字static聲明。D.局部變量在使用前必須被初始化。解答:C2、不允許作為類成員的訪問控制符的是()。A.public B.privateC.static D.protected解答:C3、為AB類的一個(gè)無形式參數(shù)無返回值的方法method書寫方法頭,使得使用類名AB作為前綴就可以調(diào)用它,該方法頭的形式為()。A、staticvoidmethod() B、publicvoidmethod()C、finalvoidmethod() D、abstractvoidmethod()解答:A4、可以在下面代碼段pointx處寫入的是?()//pointxpublicclassInteresting{//dosomething}A.Stringstr;B. staticintPI=4.14;C. publicclassMyClass{//dootherthing…}D.importjava.awt.*;解答:D5、已知A類被打包在packageA,B類被打包在packageB,且B類被聲明為public,且有一個(gè)成員變量x被聲明為protected控制方式。C類也位于packageA包,且繼承了B類。則以下說法正確的是:()A、A類的實(shí)例不能訪問到B類的實(shí)例B、A類的實(shí)例能夠訪問到B類一個(gè)實(shí)例的x成員C、C類的實(shí)例可以訪問到B類一個(gè)實(shí)例的x成員D、C類的實(shí)例不能訪問到B類的實(shí)例解答:C6、下列命題為真的是:()A、所有類都必須定義一個(gè)構(gòu)造函數(shù)。B、構(gòu)造函數(shù)必須有返回值。C、構(gòu)造函數(shù)可以訪問類的非靜態(tài)成員。D、構(gòu)造函數(shù)必須初始化類的所有數(shù)據(jù)成員。解答:C7、在Java中,關(guān)于final關(guān)鍵字的說法正確的是()A、如果修飾變量,則一旦賦了值,就等同一個(gè)常量。B、如果修飾類,則該類只能被一個(gè)子類繼承。C、如果修飾方法,則該方法不能在子類中被覆蓋。D、如果修飾方法,則該方法所在的類不能被繼承。解答:A,C8、在Java中,下面關(guān)于包的陳述中正確的是()A、包的聲明必須是源文件的第一句代碼。B、包的聲明必須緊跟在import語句的后面。C、只有公共類才能放在包中。D、可以將多個(gè)源文件中的類放在同一個(gè)包中。解答:A,DContents類的繼承1接口2Java中的包3類的封裝和內(nèi)部類4類的封裝和內(nèi)部類類的封裝將類的成員變量聲明為私有的(private),再提供一個(gè)或多個(gè)共有(public)方法實(shí)現(xiàn)對(duì)該成員變量的訪問或修改,這種方式就被稱為封裝封裝的目的隱藏類的實(shí)現(xiàn)細(xì)節(jié)讓使用者只能通過事先定制好的方法來訪問數(shù)據(jù),可以方便地加入控制邏輯,限制對(duì)屬性的不合理操作便于修改,增強(qiáng)代碼的可維護(hù)性可進(jìn)行數(shù)據(jù)檢查類的封裝和內(nèi)部類?練習(xí)TestPerson_fenzhuan.java修改原來的Person類,將其進(jìn)行良好的封裝類的封裝和內(nèi)部類內(nèi)部類(嵌套類)內(nèi)部類就是定義在另一個(gè)類內(nèi)部的類。內(nèi)部類對(duì)于同一包中的其它類來說,內(nèi)部類能夠隱藏起來。注意內(nèi)部類可以訪問其外部類中所有的屬性和方法無需創(chuàng)建外部類的對(duì)象,即可從內(nèi)部類訪問外部類的變量和方法。必須創(chuàng)建內(nèi)部類的對(duì)象,否則無法從外部類訪問內(nèi)部類的變量和方法。如果內(nèi)部類中有和外部類同名的變量或方法,則內(nèi)部類的變量和方法將獲得比外部類的變量和方法更高的優(yōu)先級(jí)。不能定義static變量類的封裝和內(nèi)部類類中定義的內(nèi)部類普通類的訪問權(quán)限修飾符defaultpublic內(nèi)部類的訪問權(quán)限修飾符defaultpublicprotectedprivate類的封裝和內(nèi)部類內(nèi)部類的訪問在Outer內(nèi)訪問Inner,只需如下:在Outer外訪問Inner,必須如下:

Innerin=newInner();Outero=newOuter();//實(shí)例化外部類

Outer.Inneroi=o.newInner();//實(shí)例化內(nèi)部類內(nèi)部類示例(OuterTest.java)publicclassOuter{privateinta=5;publicclassInner{privateinti=1;publicvoidmyMethod(){System.out.println("a="+a+",i="+i);}}publicstaticvoidmain(String[]args){Outer.InnerinnerClass=newOuter().newInner();innerClass.myMethod();}}內(nèi)部類特性

一般用在定義它的類內(nèi)部或語句塊之內(nèi),在外部引用它時(shí)必須給出完整的名稱.名字不能與包含它的類名相同。

可以使用包含它的類的靜態(tài)和實(shí)例成員變量,也可以使用它所在方法的局部變量。

可以定義為abstract,可以被其它的內(nèi)部類繼承。

可以聲明為private或protected類內(nèi)部。

若被聲明為static,就變成了頂層類,不能再使用局部變量(在內(nèi)部類不需要訪問外圍類對(duì)象的時(shí)候使用)。

若想在InnerClass中聲明任何static成員,則該InnerClass必須聲明為static。成員類靜態(tài)成員類局部類匿名類內(nèi)部類有多種形式1、成員類例:簡(jiǎn)單的內(nèi)部類classB{B(){System.out.println("instanceofB.");}

classInnerB{//定義內(nèi)部類

InnerB(){System.out.println("InstanceofInnerB.");}}}classA{publicstaticvoidmain(String[]args){Bbbb=newB();B.InnerBinbbb=bbb.newInnerB(); //創(chuàng)建內(nèi)部類對(duì)象

System.out.println();inbbb=newB().newInnerB(); }}成員類的特點(diǎn):創(chuàng)建一個(gè)內(nèi)部類的對(duì)象,必須先有一個(gè)外包類的對(duì)象存在。外包類與其內(nèi)部類之間完全互相信任。例:classB{privateintx=100;classInnerB{privateinty=1111/*,x=8888*/;voidshow(){System.out.println(x);//訪問B的private成員

System.out.println(y+"\n");}}publicvoidshow(){//外包類的方法

InnerBinB=newInnerB(); //創(chuàng)建內(nèi)部類對(duì)象

System.out.println(inB);System.out.println(inB.y+"\n");//訪問InnerB的私有成員

inB.show();}}classA{publicstaticvoidmain(String[]args){newB().newInnerB().show();newB().show();}}2、靜態(tài)成員類靜態(tài)成員類的特點(diǎn):只與外部類有關(guān)系,而不依賴于外部類的對(duì)象。因而靜態(tài)成員類的創(chuàng)建不需要有外部類的存在。例:classB{protectedstaticclassInnerB{}//靜態(tài)成員類}classA{publicstaticvoidmain(String[]args){//System.out.println(newB());B.InnerBinB=newB.InnerB();System.out.println(inB);//System.out.println(newB.InnerB());}}靜態(tài)內(nèi)部類示例(OuterTest.java)publicclassOuterTest{publicstaticintouterInt=5;publicstaticclassStaticInner{publicstaticintdoubleVal(intn){System.out.println("outerInt="+outerInt);return2*n;}}publicvoidtestInner(){inta=5;System.out.println("a="+a+",doubleVal="+StaticInner.doubleVal(a));}publicstaticvoidmain(String[]args){intn=7;System.out.println("n="+n+",doubleVal="+OuterTest.StaticInner.doubleVal(7));OuterTestout=newOuterTest();out.testInner();}}3、局部類局部類定義在方法體內(nèi)因而外部不可訪問。不需要訪問修飾符。注意:局部類的對(duì)象在堆中創(chuàng)建局部類可以訪問外包方法之外的類的一切成員。局部類只能訪問外包方法的final局部變量。

4.匿名類匿名類的特點(diǎn):匿名類沒有類名,它必須繼承一個(gè)類或者實(shí)現(xiàn)一個(gè)接口,并且不能有顯示的extends或implements子句。匿名類不能有構(gòu)造方法,因?yàn)樗鼪]有類名。可以通過new<父類名>的方法創(chuàng)建其對(duì)象,匿名類的創(chuàng)建與定義同時(shí)進(jìn)行。匿名類只能一次性的創(chuàng)建其對(duì)象,由其父類句柄持有。匿名類既可以在方法體中,也可以在參數(shù)列表中。匿名類必須簡(jiǎn)單。4、匿名類例:匿名類示例abstractclassC{abstractvoidfoo();}classB{publicCgo(intx,finalinty){returnnewC(){publicvoidfoo(){System.out.println(y);}};//匿名類的定義是一個(gè)語句,要以;結(jié)束

}publicvoidgogo(Cc00){c00.foo();}}匿名類publicclassA{publicstaticvoidmain(String[]args){Ccccc=newB().go(1,2);cccc.foo();Ccc=newB().go(1,20);newB().gogo(cc);newB().gogo(newC(){publicvoidfoo(){

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(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ì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論