山東青島網(wǎng)站建設(shè)公司哪家專(zhuān)業(yè)制作網(wǎng)頁(yè)的流程步驟
1 問(wèn)題
Java是一種面向?qū)ο蟮闹辉试S單繼承的語(yǔ)言,那么怎樣在Java中實(shí)現(xiàn)多繼承呢?
2 方法
多層繼承
如果要直接繼承類(lèi),子類(lèi)是不可以直接多繼承的,但是可以通過(guò)多層繼承來(lái)實(shí)現(xiàn)多繼承,但多層繼承一般不建議超過(guò)三次。接口
接口可用于繼承也可用于其它,比較靈活。定義類(lèi)實(shí)現(xiàn)接口,需要實(shí)現(xiàn)其所有父接口的方法。
多層繼承: package weekbook; class A{//父類(lèi)A類(lèi) ? ?private int num=10; ? ?public int getNum(){ ? ? ? ?return this.num; ? ?} ? ?public void fun(){ ? ? ? ?System.out.println("你今天天氣真好!"); ? ?} } class B extends A{//B類(lèi)繼承A類(lèi) ? ?private String name="張三"; ? ?public String getName(){ ? ? ? ?return this.name; ? ?} ? ?public void fun(){//方法覆寫(xiě) ? ? ? ?System.out.println(this.getNum()); ? ? ? ?//父類(lèi)私有域被繼承但不可直接使用,需通過(guò)getter方法間接獲得私有域的內(nèi)容 ? ? ? ?//子類(lèi)中沒(méi)找到那么會(huì)去父類(lèi)中尋找 ? ?} } class C extends B{//C類(lèi)繼承B類(lèi),相當(dāng)于間接繼承A類(lèi) ? ?private String name="李四"; ? ?public String getName(){ ? ? ? ?return this.name; ? ?} ? ?public void fun(){//方法覆寫(xiě)(結(jié)果為覆寫(xiě)后的內(nèi)容) ? ? ? ?System.out.println(this.getName()); ? ? ? ?System.out.println(this.name); ? ?} } public class Test{ ? ?public static void main(String[] args){ ? ? ? ?A a=new A(); ? ? ? ?a.fun(); ? ? ? ?print(new B());//向上轉(zhuǎn)型(優(yōu)點(diǎn)在于子類(lèi)可自動(dòng)進(jìn)行向上轉(zhuǎn)型,可實(shí)現(xiàn)參數(shù)的統(tǒng)一) ? ? ? ?print(new C()); ? ?} ? ?public static void print(A a){ ? ? ? ?a.fun(); ? ?} } 接口: package weekbook; interface IA{//父接口A(yíng)(接口為更純粹的抽象類(lèi),結(jié)構(gòu)組成只含全局常量和抽象方法) ? ?void funA(); } interface IB {//父接口B(接口前添加I用以區(qū)分接口) ? ?void funB(); } interface CImpl extends IA,IB{//接口可繼承多個(gè)父接口,用,分隔開(kāi)即可,子接口的命名可選擇較為重要的父接口進(jìn)行命名或自行命名,一般子接口后添加Impl用以區(qū)分 ? ?void funC(); } class Impl implements CImpl{//定義類(lèi)實(shí)現(xiàn)接口(也可直接實(shí)現(xiàn)父接口(多個(gè))) ? ?public void funC(){//抽象方法的實(shí)現(xiàn) ? ? ? ?System.out.println("昨天吃串串!"); ? ?} ? ?public void funA(){ ? ? ? ?System.out.println("今天吃火鍋!"); ? ?} ? ?public void funB(){ ? ? ? ?System.out.println("明天吃冒菜!"); ? ?} } public class Test1{ ? ?public static void main(String[] args){ ? ? ? ?Impl im=new Impl();//實(shí)例化對(duì)象 ? ? ? ?im.funA(); ? ? ? ?im.funB(); ? ? ? ?im.funC(); ? ?} } |
3 結(jié)語(yǔ)
針對(duì)如何實(shí)現(xiàn)多繼承的問(wèn)題,提出利用多層繼承和接口的方法,通過(guò)實(shí)驗(yàn),證明該方法是有效的,本文的每種方法都有各自的短處,多層繼承一般不超過(guò)三層 。接口實(shí)現(xiàn)多繼承時(shí),一個(gè)Java接口加入一個(gè)新的方法時(shí),所有實(shí)現(xiàn)這個(gè)接口的類(lèi)都得編寫(xiě)具體的實(shí)現(xiàn)。在未來(lái),我們可以探索利用成員內(nèi)部類(lèi)來(lái)實(shí)現(xiàn)多繼承的方法。