extends與implements的使用和區(qū)別

extends 是繼承父類,只要那個(gè)類不是聲明final或者定義為abstract就能繼承,JAVA中不支持多重繼承,繼承只能繼承一個(gè)類,但implements可以實(shí)現(xiàn)多個(gè)接口,用逗號分開就行了。

比如:

class A extends B implements C,D,E(){ //class子類名extends父類名implements接口名
    
}

父類與子類繼承關(guān)系上的不同:

class A{
    int i;
    void f(){
        
    }
}

class B extends A{
    int j;
    void f(){}  //重寫方法
    void g(){}
}

B b=new B();
b就是子類對象的實(shí)例,不僅能夠方位自己的屬性和方法,也能訪問父類的屬性和方法。諸如b.i,b.j.b.fn()都是合法的。此時(shí)b.f()是B中的f()

A a=new B();
a雖然是用的B的構(gòu)造函數(shù),但經(jīng)過upcast,成為父類對象的實(shí)例,不能訪問子類的屬性和方法。a.i,a.f()是合法的,而a.j,a.g()是非法的。此時(shí)訪問a.f()是訪問B中的f();

實(shí)現(xiàn)過程

A a = new B(); 這條語句,實(shí)際上有三個(gè)過程:

(1) A a;

將a聲明為父類對象,只是一個(gè)引用,未分配空間

(2) B temp = new B();

通過B類的構(gòu)造函數(shù)建立了一個(gè)B類對象的實(shí)例,也就是初始化

(3) a = (A)temp;

將子類對象temp轉(zhuǎn)換未父類對象并賦給a,這就是上傳(upcast),是安全的。
經(jīng)過以上3個(gè)過程,a就徹底成為了一個(gè)A類的實(shí)例。
子類往往比父類有更多的屬性和方法,上傳只是舍棄,是安全的;而下傳(downcast)有時(shí)會增加,通常是不安全的。

多態(tài)

a.f()對應(yīng)的應(yīng)該是B類的方法f()

調(diào)用構(gòu)造函數(shù)建立實(shí)例后,對應(yīng)方法的入口已經(jīng)確定了。

如此一來,a雖被上傳為A類,但其中重寫的方法f()仍然是B的方法()。也就是說,每個(gè)對象知道自己應(yīng)該調(diào)用哪個(gè)方法。

A a1 = new B();

A a2 = new C();

a1,a2兩個(gè)雖然都是A類對象,但各自的f()不同。這正是多態(tài)性的體現(xiàn)。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 1. Java基礎(chǔ)部分 基礎(chǔ)部分的順序:基本語法,類相關(guān)的語法,內(nèi)部類的語法,繼承相關(guān)的語法,異常的語法,線程的語...
    子非魚_t_閱讀 34,633評論 18 399
  • Scala與Java的關(guān)系 Scala與Java的關(guān)系是非常緊密的??! 因?yàn)镾cala是基于Java虛擬機(jī),也就是...
    燈火gg閱讀 3,606評論 1 24
  • 一、Java 簡介 Java是由Sun Microsystems公司于1995年5月推出的Java面向?qū)ο蟪绦蛟O(shè)計(jì)...
    子非魚_t_閱讀 4,543評論 1 44
  • 1.import static是Java 5增加的功能,就是將Import類中的靜態(tài)方法,可以作為本類的靜態(tài)方法來...
    XLsn0w閱讀 1,421評論 0 2
  • 方法一:偽列布局法(利用背景圖) 所謂偽列布局法,就是設(shè)計(jì)一個(gè)背景圖像,利用背景圖像來模擬欄目的背景。如,使用Ph...
    暗戀桃花源丫閱讀 1,369評論 0 0

友情鏈接更多精彩內(nèi)容