JAVA多繼承代碼 java多繼承怎么實(shí)現(xiàn)

java中的接口為什么可以多繼承,其他類不能呢?

java 在編譯的時(shí)候就會(huì)檢查 類是不是多繼承,如果出現(xiàn)多繼承編譯不通過。但是在java語法中接口是可以多繼承的。

目前創(chuàng)新互聯(lián)已為千余家的企業(yè)提供了網(wǎng)站建設(shè)、域名、網(wǎng)頁空間、網(wǎng)站托管、服務(wù)器托管、企業(yè)網(wǎng)站設(shè)計(jì)、椒江網(wǎng)站維護(hù)等服務(wù),公司將堅(jiān)持客戶導(dǎo)向、應(yīng)用為本的策略,正道將秉承"和諧、參與、激情"的文化,與客戶和合作伙伴齊心協(xié)力一起成長(zhǎng),共同發(fā)展。

拓展閱讀:

java 如果出現(xiàn)多繼承、父類中都有相同的屬性和name 值 子類如果使用父類的屬性和name 值 無法確定是哪一個(gè)父類的是 屬性和name值。

父類中如果相同的方法,并且子類并沒有覆蓋該方法。子類調(diào)用父類的時(shí)候 無法判斷是那個(gè)父類的方法。

接口是可以多繼承的。接口(jdk 1.7 以下版本)里面的方法并有實(shí)現(xiàn),即使接口之間具有相同的方法仍然是可以的 幾個(gè)接口可以有想通的實(shí)現(xiàn)類和實(shí)現(xiàn)方法。而且接口 接口里面的成員變量都是 static ? final的 ?有自己靜態(tài)域 只能自己使用。

接口的實(shí)現(xiàn)類可以有多個(gè) 。(java bean 注解注入)?一個(gè)接口(用多個(gè)實(shí)現(xiàn)類)被注入進(jìn)來。調(diào)用方法的時(shí)候。會(huì)先依據(jù)bean 查找那個(gè) 一樣的bean 。調(diào)用該實(shí)現(xiàn)類的方法。其次如過 實(shí)現(xiàn)類上都沒有注解的 bean 會(huì)按照加載的先后順序去調(diào)用的。

java如何通過實(shí)現(xiàn)接口的方式來實(shí)現(xiàn)多繼承

多態(tài)

1.JAVA里沒有多繼承,一個(gè)類之能有一個(gè)父類。而繼承的表現(xiàn)就是多態(tài)。一個(gè)父類可以有多個(gè)子類,而在子類里可以重寫父類的方法(例如方法print()),這樣每個(gè)子類里重寫的代碼不一樣,自然表現(xiàn)形式就不一樣。這樣用父類的變量去引用不同的子類,在調(diào)用這個(gè)相同的方法print()的時(shí)候得到的結(jié)果和表現(xiàn)形式就不一樣了,這就是多態(tài),相同的消息(也就是調(diào)用相同的方法)會(huì)有不同的結(jié)果。舉例說明:

//父類

public class Father{

//父類有一個(gè)打孩子方法

public void hitChild(){

}

}

//子類1

public class Son1 extends Father{

//重寫父類打孩子方法

public void hitChild(){

System.out.println("為什么打我?我做錯(cuò)什么了!");

}

}

//子類2

public class Son2 extends Father{

//重寫父類打孩子方法

public void hitChild(){

System.out.println("我知道錯(cuò)了,別打了!");

}

}

//子類3

public class Son3 extends Father{

//重寫父類打孩子方法

public void hitChild(){

System.out.println("我跑,你打不著!");

}

}

//測(cè)試類

public class Test{

public static void main(String args[]){

Father father;

father = new Son1();

father.hitChild();

father = new Son2();

father.hitChild();

father = new Son3();

father.hitChild();

}

}

都調(diào)用了相同的方法,出現(xiàn)了不同的結(jié)果!這就是多態(tài)的表現(xiàn)!

2.JAVA中沒有多繼承,而用接口實(shí)現(xiàn)了多繼承!一個(gè)類或是可以同時(shí)實(shí)現(xiàn)多個(gè)接口!(就相當(dāng)于C++里一個(gè)類同時(shí)繼承了多個(gè)類?。├纾?/p>

public class Son implements Father1,Father2,Father3{

}

接口有利于代碼功能的擴(kuò)展(增加新的功能)!而繼承則有利于代碼功能的修改(把舊的功能改成新的功能)!這里舊功能的修改和新功能的增加前提是不修改舊的功能,舊的功能仍然可以使用!舊類的代碼也不做修改!

接著上面的繼承舉例:上面例子中的子類我們統(tǒng)稱為一代子類

1.用繼承修改舊的功能。

現(xiàn)在如果一代Son1的功能打孩子,也就是方法hitChild()里邊的功能實(shí)現(xiàn)有問題,我們要把具體實(shí)現(xiàn)修改掉,那么我們可以重新寫一個(gè)新的二代子類Son11繼承自一代子類Son1,并重寫其hitChild()方法。

//二代子類

public class Son11 extends Son1{

//重寫父類打孩子方法

public void hitChild(){

System.out.println("我是二代子類對(duì)此方法的新實(shí)現(xiàn)");

}

}

2.用接口實(shí)現(xiàn)增加新的功能。

現(xiàn)在類Son1已經(jīng)有了‘打孩子’功能(也就是方法),而我們有了新的需求,我們需要它還要有一個(gè)新的功能‘寵孩子’(新方法pet();)。而舊的代碼不能動(dòng)!那么我們可以定義一個(gè)新的接口(PetInterFace),接口里定義這個(gè)方法pet()的聲明。再重新寫一個(gè)二代子類Son11,讓它先繼承類Son1,同時(shí)實(shí)現(xiàn)接口 PetInterFace!并實(shí)現(xiàn)接口里的 pet()方法!

//新接口

public interface PetInterFace{

//新功能方法

public void pet();

}

//二代子類

public class Son11 extends Son1 implements PetInterFace{

//實(shí)現(xiàn)接口方法

public void pet(){

System.out.println("父親很愛我!");

}

}

這樣這個(gè)二代子類即有了老的方法,又有新的功能!

轉(zhuǎn)至CSDN博客,如有侵權(quán),聯(lián)系刪除。有問題可以追問。

Java里如何實(shí)現(xiàn)多繼承

接口(interface) 接口被用來建立類與類之間關(guān)聯(lián)的標(biāo)準(zhǔn) ??? Java code??? public interface ITest{????????? public void test();??? }??? public class TestImpl implements ITest{????????? public void test(){???????????????? System out println( test );????????? }??? }

抽象類(abstract class) 只要類中有一個(gè)抽象方法 此類就被標(biāo)記為抽象類 實(shí)際上抽象類除了被繼承之外沒有任何意義

區(qū)別??? 接口是公開(public)的 里面不能有私有的方法或變量 是用于讓別人使用的 實(shí)現(xiàn)接口的一定要實(shí)現(xiàn)接口里定義的所有方法 ??? 而抽象類是可以有私有方法或私有變量的 實(shí)現(xiàn)抽象類可以有選擇地重寫需要用到的方法 但是必須實(shí)現(xiàn)里面所有的抽象方法 ??? 抽象類在 Java 語言中表示的是一種繼承關(guān)系 一個(gè)類只能使用一次繼承關(guān)系 ??? 但是 一個(gè)類卻可以實(shí)現(xiàn)多個(gè)interface(java中實(shí)現(xiàn)多重繼承的方法之一) ??? 抽象類中可以有自己的數(shù)據(jù)成員 也可以有非abstarct的成員方法 ??? 而在接口中 只能夠有靜態(tài)的不能被修改的數(shù)據(jù)成員(也就是必須是 static final的 不過在 interface中一般不定義數(shù)據(jù)成員) 而且所有的成員方法都是抽象的 ??? 抽象類和接口所反映出的設(shè)計(jì)理念不同 ??? 其實(shí)abstract class表示的是 is a 關(guān)系 interface表示的是 like a 關(guān)系 (組合是 has a 關(guān)系)??? 接口中定義的變量默認(rèn)是public static final 型 且必須給其初值 所以實(shí)現(xiàn)類中不能重新定義 也不能改變其值 ??? 抽象類中的變量默認(rèn)是 friendly 型 其值可以在子類中重新定義 也可以重新賦值

一般的應(yīng)用里 最頂級(jí)的是接口 然后是抽象類實(shí)現(xiàn)接口 最后才到具體類實(shí)現(xiàn) 不是很建議具體類直接實(shí)現(xiàn)接口的 還有一種設(shè)計(jì)模式是面向接口編程 而非面向?qū)崿F(xiàn)編程

其實(shí)接口是抽象類的延伸 可以將它看做是純粹的抽象類 就是說接口比抽象類還抽象 還有設(shè)計(jì)接口的目的就是為了實(shí)現(xiàn)C++中的多重繼承 不過java團(tuán)隊(duì)設(shè)計(jì)的一樣更有趣的東西來實(shí)現(xiàn)這個(gè)功能 那就是內(nèi)部類(inner class)

內(nèi)部類(inner class)??? Java code??? public class OuterClass{//外部類?????????? private class InnerClass{}//內(nèi)部類??? }

一 定義??? 放在一個(gè)類的內(nèi)部的類我們就叫內(nèi)部類 ??? 二 作用??? 內(nèi)部類可以很好的實(shí)現(xiàn)隱藏 也就是封裝性 一般的非內(nèi)部類 是不允許有 private 與protected權(quán)限的 但內(nèi)部類可以??? 內(nèi)部類擁有外圍類的所有元素的訪問權(quán)限??? 可是實(shí)現(xiàn)多重繼承(這個(gè)特點(diǎn)非常重要 個(gè)人認(rèn)為它是內(nèi)部類存在的最大理由之一)??? 可以避免修改接口而實(shí)現(xiàn)同一個(gè)類中兩種同名方法的調(diào)用??? 三 多重繼承的實(shí)現(xiàn)

類一??? Java code??? public?? class? Example {

public? String getName()? {?????????? return?? luffyke ;?????? }??? }

類二??? Java code??? public?? class? Example {

public?? int? getAge()?????????? {??????????????? return?? ;?????????? }??? }

類三

Java code??? public class MainExample {

public class Test extends Example {??????????? public String getName() {??????????????? return super getName();??????????? }??????? }

public class Test extends Example {??????????? public int getAge() {??????????????? return super getAge();??????????? }??????? }

public String showName() {??????????? return new Test () getName();??????? }

public int showAge() {??????????? return new Test () getAge();??????? }

public static void main(String args[]) {??????????? MainExample example = new MainExample();??????????? System out println( 姓名: + example showName());??????????? System out println( 年齡: + example showAge());??????? }??? }

lishixinzhi/Article/program/Java/hx/201311/26594

java中如何繼承多個(gè)父類,如何實(shí)現(xiàn)多個(gè)接口?

java中沒有多繼承(就是不能繼承多個(gè)父類),只有多重繼承。。比如:\x0d\x0aclass A{\x0d\x0a}\x0d\x0a\x0d\x0aclass B extends A{\x0d\x0a}\x0d\x0a\x0d\x0aclass C extends B {\x0d\x0a}\x0d\x0a可以實(shí)現(xiàn)多個(gè)接口,比如:\x0d\x0ainterface A{\x0d\x0a}\x0d\x0a\x0d\x0ainterface B{\x0d\x0a\x0d\x0a}\x0d\x0a\x0d\x0aclass C implements A, B\x0d\x0a{\x0d\x0a}

使用內(nèi)部類讓Java實(shí)現(xiàn)“多繼承”

使用內(nèi)部類讓Java實(shí)現(xiàn) 多繼承

眾所周知 Java沒有像c++那樣支持多繼承 但是我們可以使用接口或內(nèi)部類來模擬實(shí)現(xiàn)多繼承

我們使用內(nèi)部類來實(shí)現(xiàn)一個(gè)繼承自消費(fèi)者 又繼承自生產(chǎn)者的派生類

實(shí)際上Java之所以設(shè)計(jì)出內(nèi)部類這個(gè)概念 一方面是為了更好的封裝性 另一方面就是借助內(nèi)部類模擬實(shí)現(xiàn)多繼承

首先我們定義一個(gè)消費(fèi)者抽象基類

view plainprint?

/** * Consumer Class *@author androidyue *Last Modified ??? 上午 */ public abstract? class Consumer { protected float buyPrice protected abstract void? buyGoods() }

以下是生產(chǎn)者抽象基類

view plainprint?

/** * Producer Class *@author androidyue *Last Modified ??? 上午 */ public abstract class Producer { protected? float cost protected abstract void produce() }

使用內(nèi)部類實(shí)現(xiàn) 多繼承 的派生子類

view plainprint?

/** *Java實(shí)現(xiàn) 多繼承

*@author androidyue *Last Modified ??? 上午 */ public class InnerClassDemo extends Producer { private ConsumerBuyer buyer

public void desribeMySelf(){ System out println( 使用Java模擬多繼承 ) this produce() this buyer=new ConsumerBuyer() this buyer buyGoods()

}

@Override protected void produce() { st= f System out println( 我是生產(chǎn)者 我以每件 +st+ RMB的成本生產(chǎn)一件產(chǎn)品 然后以 元價(jià)格對(duì)外出售 ) }

class ConsumerBuyer extends Consumer{

@Override protected void buyGoods() { this buyPrice= f System out println( 我是消費(fèi)者 我以 +this buyPrice+ RMB 買了一件售價(jià) 元的商品 不信吧 因?yàn)槲乙彩巧a(chǎn)者!^_^ )

}

}

}

在程序入口調(diào)用

view plainprint?

/** *? the entrance of application *@author androidyue *Last Modified ??? 上午 */ public class AppMain { public static void main(String[] args){ InnerClassDemo demo=new InnerClassDemo() demo desribeMySelf() }

lishixinzhi/Article/program/Java/hx/201311/25912

Java對(duì)于多重繼承是怎么實(shí)現(xiàn)的

Java對(duì)于多重繼承是怎么實(shí)現(xiàn)的?

首先回答這個(gè)問題之前,我需要說明下什么是繼承?什么是多重繼承和單繼承?java采用何種機(jī)制來實(shí)現(xiàn)多重繼承:

1.1繼承是面向?qū)ο缶幊痰囊环N特性,是保留原有類功能的前提下拓展或改寫部分功能,實(shí)現(xiàn)代碼復(fù)用的方式.。

1.2單繼承就是一個(gè)類只可以繼承自一個(gè)父類,多繼承是指一個(gè)類可以同時(shí)繼承多個(gè)父類。

1.3java中使用的是單繼承,也就是一個(gè)類有且只能有一個(gè)父類,java中可以使用接口實(shí)現(xiàn)來實(shí)現(xiàn)類似多繼承的效果。

2.下面著重介紹Java中如何實(shí)現(xiàn)多繼承:

如下是多重繼承示例:

interface CanFight{

void fight();

}

interface CanSwim{

void swim();

}

interface CanFly{

void fly();

}

class ActionCharacter{

public void fight(){

System.out.println("I can fight!");

}

}

class Hero extends ActionCharacter implements CanFight,CanSwim,CanFly{

public void swim(){

System.out.println("I can swim!");

}

public void fly(){

System.out.println("I can fly!");

}

}

public class Adventure {

public static void t(CanFight x){x.fight();

}

public static void u(CanSwim x){x.swim();

}

public static void v(CanFly x){x.fly();

}

public static void w(ActionCharacter x){x.fight();

}

public static void main(String[] args){

Hero h=new Hero();

t(h);

u(h);

v(h);

w(h);

}

}

從這個(gè)實(shí)例中,不能看出Java對(duì)于多繼承是如何實(shí)現(xiàn)的。

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

I can fight!?

I can swim!?

I can fly!?

I can fight!

以上就是Java對(duì)于多繼承是如何實(shí)現(xiàn)的說明

本文題目:JAVA多繼承代碼 java多繼承怎么實(shí)現(xiàn)
網(wǎng)站路徑:http://muchs.cn/article10/hjdego.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站內(nèi)鏈、外貿(mào)網(wǎng)站建設(shè)、搜索引擎優(yōu)化外貿(mào)建站、網(wǎng)站改版、品牌網(wǎng)站制作

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

外貿(mào)網(wǎng)站建設(shè)