1. 程式人生 > >內部類實現多繼承(內部類的優勢)及內部類實現一個介面與外圍類實現這個介面的區別

內部類實現多繼承(內部類的優勢)及內部類實現一個介面與外圍類實現這個介面的區別

在java中一個類可以多重實現,但不能多重繼承,也就是說一個類能夠同時實現多個介面,但不能同時繼承多個類。但有時候我們確實需要繼承多個類,比如希望擁有兩個類的行為功能,就很難使用單繼承來解決問題了(當然多層繼承是可以解決的),那麼我們還可以用什麼辦法來解決多重繼承的問題呢?沒錯!用內部類!下面介紹一個案例。假設有一個父親和母親,他們的兒子繼承了他們兩個的優點,那麼怎麼來寫呢?

  1. public interface Father {

    //定義父親的強壯指數的介面

    public int strong();

    }

  2. public interface Mother {

    //定義母親的善良指數的介面

    public int kind();

    }

  3. public class FatherImpl implements Father {

    //實現父親介面,定義父親強壯指數為8

    @Override

    public int strong() {

    return 8;

    }

    }

  4. public class MotherImpl implements Mother {

    //實現母親介面,定義母親善良指數為8

    @Override

    public int kind() {

    return 8;

    }

    }

  5. 下面兒子類來了~~

兒子類

可以看到兒子繼承父親,並且覆寫了父類的strong方法,同時呢兒子也具有母親的優點,覆寫了母親的kind方法。這裡構造了一個MotherSpecial類繼承於母親類,也就是獲得了母親類的行為方法,這也是內部類的一個重要特徵:內部類可以繼承一個與外部類無關的類,保證了內部類的獨立性,

正是基於這一點,多重繼承才能成為可能~~

在現實生活中,也確實存在多重繼承的問題,比如我國的“四不像”(學名麋鹿),其外形“似鹿非鹿,似馬非馬,似牛非牛,似驢非驢”,這要是用單繼承就麻煩了,如果用多繼承的話就可以很好的解決問題了,定義鹿、馬、牛、驢四個類,再建立麋鹿類的多個內部類,繼承他們即可~~~

內部類實現一個介面與外圍類實現這個介面的區別

在java中,外圍類只能繼承一個基類,要實現多繼承,只有繼承多個介面型別。有時,你需要與介面的實現進行互動,所以使用內部類最重要的一個原因是:每個內部類都能獨立的繼承自一個(介面的)實現,內部類允許你繼承多個非介面型別。正是因為內部類的這種能力,有效的實現了“多重繼承”。

內部類的其他特性:

1.內部類可以有多個例項,每個例項都有自己的狀態資訊,並且與其外圍類物件的資訊相互獨立;

2.在單個外圍類中,你可以讓多個內部類以不同的方式實現一個介面,或繼承同以一個類;

3.建立內部類物件的時候並不依賴外圍類物件的建立;

4.內部類與外圍類之間沒有另人迷惑的“is-a”關係,它就是一個獨立的實體