Java面向?qū)ο缶幊讨^承和多態(tài)以及包的解析與使用范例_第1頁
Java面向?qū)ο缶幊讨^承和多態(tài)以及包的解析與使用范例_第2頁
Java面向?qū)ο缶幊讨^承和多態(tài)以及包的解析與使用范例_第3頁
Java面向?qū)ο缶幊讨^承和多態(tài)以及包的解析與使用范例_第4頁
Java面向?qū)ο缶幊讨^承和多態(tài)以及包的解析與使用范例_第5頁
已閱讀5頁,還剩3頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

第Java面向?qū)ο缶幊讨^承和多態(tài)以及包的解析與使用范例animal1和animal2雖然都是Animal類型的引用,但是animal1指向Animal類型的實(shí)例,animal2指向Bird類型的實(shí)例.

針對animal1和animal2分別調(diào)用eat方法,發(fā)現(xiàn)animal1.eat()實(shí)際調(diào)用了父類的方法,而animal2.eat()實(shí)際調(diào)用了子類的方法.

因此,在Java中,調(diào)用某個類的方法,究竟執(zhí)行了哪段代碼(是父類方法的代碼還是子類方法的代碼),要看究竟這個引

用指向的是父類對象還是子類對象.這個過程是程序運(yùn)行時決定的(而不是編譯期),因此稱為動態(tài)綁定

2.3方法重寫

定義:在子類中可以根據(jù)需要對從父類中繼承來的方法進(jìn)行改造,也稱

為方法的重置、覆蓋。在程序執(zhí)行時,子類的方法將覆蓋父類的方法。

要求:

子類重寫的方法必須和父類被重寫的方法具有相同的方法名稱、參數(shù)列表

子類重寫的方法的返回值類型不能大于父類被重寫的方法的返回值類型

子類重寫的方法使用的訪問權(quán)限不能小于父類被重寫的方法的訪問權(quán)限,子類不能重寫父類中聲明為private權(quán)限的方法

子類方法拋出的異常不能大于父類被重寫方法的異常

注意:

子類與父類中同名同參數(shù)的方法必須同時聲明為非static的(即為重寫),或者同時聲明為static的(不是重寫)。因?yàn)閟tatic方法是屬于類的,子類無法覆蓋父類的方法

方法重寫舉例1:

publicclassPerson{

publicStringname;

publicintage;

publicStringgetInfo(){

return"Name:"+name+"\n"+"age:"+age;

publicclassStudentextendsPerson{

publicStringschool;

publicStringgetInfo(){//重寫方法

return"Name:"+name+"\nage:"+age

+"\nschool:"+school;

publicstaticvoidmain(Stringargs[]){

Students1=newStudent();

="Bob";

s1.age=20;

s1.school="school2";

System.out.println(s1.getInfo());//Name:Bobage:20school:school2

方法重寫舉例2:

classParent{

publicvoidmethod1(){}

classChildextendsParent{

//非法,子類中的method1()的訪問權(quán)限private比被覆蓋方法的訪問權(quán)限public小

privatevoidmethod1(){}

publicclassUseBoth{

publicstaticvoidmain(String[]args){

Parentp1=newParent();

Childc1=newChild();

p1.method1();

c1.method1();

2.4向下轉(zhuǎn)型

向下轉(zhuǎn)型就是父類對象轉(zhuǎn)成子類對象.相比于向上轉(zhuǎn)型來說,向下轉(zhuǎn)型沒那么常見,

但是也有一定的用途.

從子類到父類的類型轉(zhuǎn)換可以自動進(jìn)行

從父類到子類的類型轉(zhuǎn)換必須通過造型(強(qiáng)制類型轉(zhuǎn)換)實(shí)現(xiàn)

無繼承關(guān)系的引用類型間的轉(zhuǎn)換是非法的

在造型前可以使用instanceof操作符測試一個對象的類型

對于Animalanimal=newBird(“圓圓”)這樣的代碼:

編譯器檢查有哪些方法存在,看的是Animal這個類型

執(zhí)行時究竟執(zhí)行父類的方法還是子類的方法,看的是Bird這個類型.

那么想實(shí)現(xiàn)剛才的效果,就需要向下轉(zhuǎn)型.

//(Bird)表示強(qiáng)制類型轉(zhuǎn)換

Birdbird=(Bird)animal;

bird.fly();

//執(zhí)行結(jié)果

圓圓正在飛

為了讓向下轉(zhuǎn)型更安全,我們可以先判定一下看看animal本質(zhì)上是不是一個Bird實(shí)例,再來轉(zhuǎn)換

Animalanimal=newCat("小貓");

if(animalinstanceofBird){

Birdbird=(Bird)animal;

bird.fly();

instanceof可以判定一個引用是否是某個類的實(shí)例.如果是,則返回ture。這時再進(jìn)行向下轉(zhuǎn)型就比較安全了。

2.5super關(guān)鍵字

2.5.1super關(guān)鍵字的基本用法

在Java類中使用super來調(diào)用父類中的指定操作:

super可用于訪問父類中定義的屬性

super可用于調(diào)用父類中定義的成員方法

super可用于在子類構(gòu)造器中調(diào)用父類的構(gòu)造器

注意:

尤其當(dāng)子父類出現(xiàn)同名成員時,可以用super表明調(diào)用的是父類中的成員super的追溯不僅限于直接父類

super和this的用法相像,this代表本類對象的引用,super代表父類的內(nèi)存

空間的標(biāo)識

示例1使用了super來調(diào)用父類的構(gòu)造器(這個代碼前面已經(jīng)寫過了)

publicBird(Stringname){

super(name);

示例2使用super來調(diào)用父類的普通方法

publicclassBirdextendsAnimal{

publicBird(Stringname){

super(name);

@Override

publicvoideat(Stringfood){

//修改代碼,讓子調(diào)用父類的接口.

super.eat(food);

System.out.println("我是一只小鳥");

System.out.println(+"正在吃"+food);

2.5.2this和super的區(qū)別

3.包的使用

包(package)是組織類的一種方式.

使用包的主要目的是保證類的唯一性.

例如,你在代碼中寫了一個Test類.然后你的同事也可能寫一個Test類.如果出現(xiàn)兩個同名的類,就會沖突,導(dǎo)致代碼不能編譯通過

3.1導(dǎo)入包中的類

包(package)是組織類的一種方式.

使用包的主要目的是保證類的唯一性

代碼示例:

publicclassTest{

publicstaticvoidmain(String[]args){

java.util.Datedate=newjava.util.Date();

//得到一個毫秒級別的時間戳

System.out.println(date.getTime());

可以使用import語句導(dǎo)入包

importjava.util.Date;

publicclassTest{

publicstaticvoidmain(String[]args){

Datedate=newDate();

//得到一個毫秒級別的時間戳

System.out.println(date.getTime());

如果需要使用java.util中的其他類,可以使用importjava.util.*

注意:Java是用到包中的那個類就導(dǎo)入那個類

但是我們更建議顯式的指定要導(dǎo)入的類名.否則還是容易出現(xiàn)沖突的情況.

例如:

importjava.util.*;

importjava.sql.*;

publicclassTest{

publicstaticvoidmain(String[]args){

//util和sql中都存在一個Date這樣的類,此時就會出現(xiàn)歧義,編譯出錯

Datedate=newDate();

System.out.println(date.getTime());

//編譯出錯

在這種情況下我們就需要完整的包名

importstaticjava.lang.Math.*;

publicclassTest{

publicstaticvoidmain(String[]args){

doublex=30;

doubley=40;

//靜態(tài)導(dǎo)入的方式寫起來更方便一些.但不推薦

//doubleresult=Math.sqrt(Math.pow(x,2)+Math.pow(y,2));

doubleresult=sqrt(pow(x,2)+pow(y,2));

System.out.println(result);

3.2常見系統(tǒng)包

java.lang:系統(tǒng)常用基礎(chǔ)類(String、Object),此

溫馨提示

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

最新文檔

評論

0/150

提交評論