日本综合一区二区|亚洲中文天堂综合|日韩欧美自拍一区|男女精品天堂一区|欧美自拍第6页亚洲成人精品一区|亚洲黄色天堂一区二区成人|超碰91偷拍第一页|日韩av夜夜嗨中文字幕|久久蜜综合视频官网|精美人妻一区二区三区

RELATEED CONSULTING
相關(guān)咨詢(xún)
選擇下列產(chǎn)品馬上在線(xiàn)溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問(wèn)題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營(yíng)銷(xiāo)解決方案
多態(tài)的實(shí)現(xiàn)java代碼 java 多態(tài)的實(shí)現(xiàn)

Java運(yùn)行時(shí)多態(tài)性的實(shí)現(xiàn)

運(yùn)行時(shí)多態(tài)性是面向?qū)ο蟪绦蛟O(shè)計(jì)代碼重用的一個(gè)最強(qiáng)大機(jī)制 動(dòng)態(tài)性的概念也可以被說(shuō)成 一個(gè)接口 多個(gè)方法 Java實(shí)現(xiàn)運(yùn)行時(shí)多態(tài)性的基礎(chǔ)是動(dòng)態(tài)方法調(diào)度 它是一種在運(yùn)行時(shí)而不是在編譯期調(diào)用重載方法的機(jī)制 下面就繼承和接口實(shí)現(xiàn)兩方面談?wù)刯ava運(yùn)行時(shí)多態(tài)性的實(shí)現(xiàn)

創(chuàng)新互聯(lián)公司-專(zhuān)業(yè)網(wǎng)站定制、快速模板網(wǎng)站建設(shè)、高性?xún)r(jià)比藍(lán)田網(wǎng)站開(kāi)發(fā)、企業(yè)建站全套包干低至880元,成熟完善的模板庫(kù),直接使用。一站式藍(lán)田網(wǎng)站制作公司更省心,省錢(qián),快速模板網(wǎng)站建設(shè)找我們,業(yè)務(wù)覆蓋藍(lán)田地區(qū)。費(fèi)用合理售后完善,十載實(shí)體公司更值得信賴(lài)。

一 通過(guò)繼承中超類(lèi)對(duì)象引用變量引用子類(lèi)對(duì)象來(lái)實(shí)現(xiàn)

舉例說(shuō)明

//定義超類(lèi)superA

class superA

{

int i =

void fun()

{

System out println( This is superA )

}

}

//定義superA的子類(lèi)subB

class subB extends superA

{

int m =

void fun()

{

System out println( This is subB )

}

}

//定義superA的子類(lèi)subC

class subC extends superA

{

int n =

void fun()

{

System out println( This is subC )

}

}

class Test

{

public static void main(String[] args)

{

superA a

subB b = new subB()

subC c = new subC()

a=b

a fun() ???????? ( )

a=c

a fun() ???????? ( )

}

}

運(yùn)行結(jié)果為

This is subB

This is subC

上述代碼中subB和subC是超類(lèi)superA的子類(lèi) 我們?cè)陬?lèi)Test中聲明了 個(gè)引用變量a b c 通過(guò)將子類(lèi)對(duì)象引用賦值給超類(lèi)對(duì)象引用變量來(lái)實(shí)現(xiàn)動(dòng)態(tài)方法調(diào)用 也許有人會(huì)問(wèn) 為什么( )和( )不輸出 This is superA java 的這種機(jī)制遵循一個(gè)原則 當(dāng)超類(lèi)對(duì)象引用變量引用子類(lèi)對(duì)象時(shí) 被引用對(duì)象的類(lèi)型而不是引用變量的類(lèi)型決定了調(diào)用誰(shuí)的成員方法 但是這個(gè)被調(diào)用的方法必須是在超類(lèi)中定義過(guò)的 也就是說(shuō)被子類(lèi)覆蓋的方法

所以 不要被上例中( )和( )所迷惑 雖然寫(xiě)成a fun() 但是由于( )中的a被b賦值 指向了子類(lèi)subB的一個(gè)實(shí)例 因而( )所調(diào)用的fun()實(shí)際上是子類(lèi)subB的成員方法fun() 它覆蓋了超類(lèi)superA的成員方法fun() 同樣( )調(diào)用的是子類(lèi)subC的成員方法fun()

另外 如果子類(lèi)繼承的超類(lèi)是一個(gè)抽象類(lèi) 雖然抽象類(lèi)不能通過(guò)new操作符實(shí)例化 但是可以創(chuàng)建抽象類(lèi)的對(duì)象引用指向子類(lèi)對(duì)象 以實(shí)現(xiàn)運(yùn)行時(shí)多態(tài)性 具體的實(shí)現(xiàn)方法同上例

不過(guò) 抽象類(lèi)的子類(lèi)必須覆蓋實(shí)現(xiàn)超類(lèi)中的所有的抽象方法 否則子類(lèi)必須被abstract修飾符修飾 當(dāng)然也就不能被實(shí)例化了

二 通過(guò)接口類(lèi)型變量引用實(shí)現(xiàn)接口的類(lèi)的對(duì)象來(lái)實(shí)現(xiàn)

接口的靈活性就在于 規(guī)定一個(gè)類(lèi)必須做什么 而不管你如何做 我們可以定義一個(gè)接口類(lèi)型的引用變量來(lái)引用實(shí)現(xiàn)接口的類(lèi)的實(shí)例 當(dāng)這個(gè)引用調(diào)用方法時(shí) 它會(huì)根據(jù)實(shí)際引用的類(lèi)的實(shí)例來(lái)判斷具體調(diào)用哪個(gè)方法 這和上述的超類(lèi)對(duì)象引用訪(fǎng)問(wèn)子類(lèi)對(duì)象的機(jī)制相似

舉例說(shuō)明

//定義接口InterA

interface InterA

{

void fun()

}

//實(shí)現(xiàn)接口InterA的類(lèi)B

class B implements InterA

{

public void fun()

{

System out println( This is B )

}

}

//實(shí)現(xiàn)接口InterA的類(lèi)C

class C implements InterA

{

public void fun()

{

System out println( This is C )

}

}

class Test

{

public static void main(String[] args)

{

InterA a

a= new B()

a fun()

a = new C()

a fun()

}

}

輸出結(jié)果為

This is B

This is C

上例中類(lèi)B和類(lèi)C是實(shí)現(xiàn)接口InterA的兩個(gè)類(lèi) 分別實(shí)現(xiàn)了接口的方法fun() 通過(guò)將類(lèi)B和類(lèi)C的實(shí)例賦給接口引用a而實(shí)現(xiàn)了方法在運(yùn)行時(shí)的動(dòng)態(tài)綁定 充分利用了 一個(gè)接口 多個(gè)方法 展示了Java的動(dòng)態(tài)多態(tài)性

需要注意的一點(diǎn)是 Java在利用接口變量調(diào)用其實(shí)現(xiàn)類(lèi)的對(duì)象的方法時(shí) 該方法必須已經(jīng)在接口中被聲明 而且在接口的實(shí)現(xiàn)類(lèi)中該實(shí)現(xiàn)方法的類(lèi)型和參數(shù)必須與接口中所定義的精確匹配

lishixinzhi/Article/program/Java/hx/201311/26085

Java程序如何實(shí)現(xiàn)多態(tài)

多態(tài),就是重載和重寫(xiě).重載發(fā)生在一個(gè)類(lèi)中.重寫(xiě)發(fā)生在子類(lèi),意思就是子類(lèi)重寫(xiě)父類(lèi)相同名稱(chēng)的方法.剛學(xué)語(yǔ)言有的東西,不必搞得那么清楚,只有知道怎么用就行了,有的問(wèn)題你要想真正把它搞得很懂,短時(shí)間是不可能的,比如說(shuō)接口,沒(méi)有幾年工作經(jīng)驗(yàn)?zāi)愀静豢赡苷嬲斫馐裁词墙涌?甚至有的人工作四,五年也沒(méi)搞明白什么是接口,不要花太多時(shí)間去搞這些不容易搞懂的問(wèn)題.

重載的特性,方法名相同.返回類(lèi)型,傳入方法的參數(shù)不同(包括個(gè)數(shù)和類(lèi)型).

重寫(xiě)的特性,方法名相同,返回類(lèi)型,參數(shù)均相同,必須發(fā)生在子類(lèi).

1.Java語(yǔ)言允許某個(gè)類(lèi)型的引用變量引用子類(lèi)的實(shí)例,而且可以對(duì)這個(gè)引用變量進(jìn)行類(lèi)型轉(zhuǎn)換。

Animal animal=new Dog(); //引用變量animal引用一個(gè)Animal子類(lèi)Dog的實(shí)例

Dog dog=(Dog)animal; //向下轉(zhuǎn)型,把Animal類(lèi)型轉(zhuǎn)換為Dog類(lèi)型

Creature creature=animal; //向上轉(zhuǎn)型,把Animal類(lèi)型轉(zhuǎn)換為 Creature類(lèi)型

animal=new Cat(); //引用變量animal引用另一個(gè)Animal子類(lèi)Cat的實(shí)例

注:Creature這里指的是生物。

2.如果把引用變量轉(zhuǎn)換為子類(lèi)類(lèi)型,稱(chēng)為向下轉(zhuǎn)型,如果把引用變量轉(zhuǎn)換為父類(lèi)類(lèi)型,稱(chēng)為向上轉(zhuǎn)型。

3.在進(jìn)行引用變量的類(lèi)型轉(zhuǎn)換時(shí),會(huì)受到各種限制。而且在通過(guò)引用變量訪(fǎng)問(wèn)它所引用的實(shí)例的靜態(tài)屬性、靜態(tài)方法、實(shí)例屬性、實(shí)例方法,以及從父類(lèi)中繼承的方法和屬性時(shí),Java虛擬機(jī)會(huì)采用不同的綁定機(jī)制。

4.成員變量、靜態(tài)方法按照引用變量聲明的類(lèi)型靜態(tài)綁定;實(shí)例方法按照引用變量引用的實(shí)例動(dòng)態(tài)綁定。

例如,對(duì)于以下這段代碼:

Fathers f=new Sons();

System.out.println(“f.var=”+f.var);

System.out.println(“f.staticVar=”+f.staticVar);

f.method();

f.staticMethod();

運(yùn)行時(shí)將會(huì)輸出如下結(jié)果:

f.var=FatherVar

f.staticVar=StaticFaterVar

Son method

Static Father method

class Fathers{

String var="FatherVar";

static String staticVar="StaticFatherVar";

void method(){System.out.println("Father method");}

static void staticMethod(){System.out.println("Static Father method");}

}

class Sons extends Fathers{

String var="SonVar";

static String staticVar="StaticSonVar";

void method(){System.out.println("Son method");}

static void staticMethod(){System.out.println("Static Son method");}

String sonVar=null;

void sonMethod(){}

}

誰(shuí)能跟我說(shuō)幾個(gè)JAVA多態(tài),在現(xiàn)實(shí)生活中應(yīng)用的例子,不要說(shuō)代碼和概念,就只說(shuō)案例

有一個(gè)比較經(jīng)典的多態(tài)實(shí)例:

有一個(gè)Animal類(lèi),它有Cat,和Dog兩個(gè)子類(lèi),在Animal中有個(gè)say方法,當(dāng)Cat調(diào)用這個(gè)方法的時(shí)候輸出的是“小貓喵喵喵”,當(dāng)Dog調(diào)用這個(gè)方法時(shí),輸出的是“小狗汪汪汪”,這就是Java多態(tài)的實(shí)現(xiàn)。

1、定義一種動(dòng)物,該類(lèi)型的動(dòng)物有叫的屬性。

2、分別定義貓,狗,鳥(niǎo),都繼承于該動(dòng)物,都有叫的屬性。

3、分別表示出各個(gè)具體小動(dòng)物的叫聲,例如貓的叫聲:喵、狗的叫聲:汪、鳥(niǎo)的叫聲:咻,點(diǎn)是叫聲,實(shí)現(xiàn)各個(gè)具體小動(dòng)物用的叫聲的方法是用的同一個(gè)函數(shù)名稱(chēng),就是動(dòng)物的叫聲函數(shù)。

多態(tài):

這個(gè)案例網(wǎng)上是沒(méi)有的,屬于無(wú)忌獨(dú)創(chuàng),當(dāng)時(shí)在幫孩子輔導(dǎo)作業(yè),小學(xué)科學(xué),里面有一點(diǎn)內(nèi)容是關(guān)于人的牙齒,說(shuō)牙齒分為:門(mén)齒、犬齒、臼齒。

問(wèn)閨女,為什么這么分呢?閨女說(shuō)牙齒雖然都是用來(lái)咬食物,但是食物種類(lèi)很多,咬碎需要的工具也不一樣,門(mén)齒用來(lái)切割食物,如:蘋(píng)果、梨;犬齒用來(lái)撕碎食物。

如肉類(lèi);臼齒用來(lái)磨碎食物,如犬齒撕碎的肉類(lèi),就需要再用臼齒來(lái)磨碎,然后送到食道,胃,小腸,大腸進(jìn)行消化。我恍然大悟,這不就是Java面向?qū)ο罄锏亩鄳B(tài)嗎?多完美啊。

這也很好說(shuō)明了為什么會(huì)有多態(tài)出現(xiàn),因?yàn)樯钪芯痛嬖谔噙@種例子,所以需要多態(tài)來(lái)匹配解決。


本文題目:多態(tài)的實(shí)現(xiàn)java代碼 java 多態(tài)的實(shí)現(xiàn)
地址分享:http://www.dlmjj.cn/article/ddcohsc.html