Java多態(tài)

1.基于繼承

  • 覆蓋
    子類覆蓋父類的方法,實(shí)現(xiàn)多態(tài)
  • 抽象
    子類實(shí)現(xiàn)父類的抽象方法,實(shí)現(xiàn)多態(tài)
    abstract 不能與private、static、final或native并列修飾同一個(gè)方法

2.基于接口

接口里面所有的變量都是public static final
所有方法都是public abstract,public abstract可以省略
不能有非abstract方法和非public變量,否則會(huì)報(bào)錯(cuò),

3.案例

摘自http://www.cnblogs.com/chenssy/p/3372798.html

public class A {
    public String show(D obj) {
        return ("A and D");
    }

    public String show(A obj) {
        return ("A and A");
    } 
}

public class B extends A{
    public String show(B obj){
        return ("B and B");
    }
    
    public String show(A obj){
        return ("B and A");
    } 
}

public class C extends B {

}

public class D extends B {

}

public class Test {
    public static void main(String[] args) {
        A a1 = new A();
        A a2 = new B();
        B b = new B();
        C c = new C();
        D d = new D();
        
        System.out.println("1--" + a1.show(b));
        System.out.println("2--" + a1.show(c));
        System.out.println("3--" + a1.show(d));
        System.out.println("4--" + a2.show(b));
        System.out.println("5--" + a2.show(c));
        System.out.println("6--" + a2.show(d));
        System.out.println("7--" + b.show(b));
        System.out.println("8--" + b.show(c));
        System.out.println("9--" + b.show(d));
    }
}

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

1--A and A
2--A and A
3--A and D
4--B and A
5--B and A
6--A and D
7--B and B
8--B and B
9--A and D

我來理解下4、5和9:

  • a2.show(b)
    A a2 = new B();a2.show(b);
    調(diào)用的是a2的方法,因?yàn)閍2向上轉(zhuǎn)型為A,那么show只能調(diào)用類A的方法,A里有參數(shù)為A和D兩種,所以a2.show(b)對(duì)應(yīng)于A.show(B)對(duì)應(yīng)于A.show(A),由于多態(tài)性,最終調(diào)用的是B.show(A)即B and A。

  • a2.show(c)
    A a2 = new B();a2.show(c);
    調(diào)用的是a2的方法,因?yàn)閍2向上轉(zhuǎn)型為A,那么show只能調(diào)用類A的方法,A里參數(shù)有A和D兩種,所以a2.show(b)對(duì)應(yīng)于A.show(C)對(duì)應(yīng)于A.show(B)對(duì)應(yīng)于A.show(A),由于多態(tài)性,最終調(diào)用的是B.show(A)即B and A.

  • b.show(d)
    B b = new B();D d = new D();b.show(d);
    由于B是A的子類,那么B可以繼承A的所有非private方法,當(dāng)然A的show(D)也在內(nèi),所以,就直接調(diào)用的是A.show(D)即A and D.

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

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

  • 最近在復(fù)習(xí)java基礎(chǔ),在多態(tài)上面有一些不太明白的地方,故記錄下來供自己時(shí)時(shí)復(fù)習(xí)查閱鞏固。 概述 我們都知道面向?qū)?..
    咕嚕__閱讀 376評(píng)論 0 0
  • 面向?qū)ο蟮娜蠡咎卣魇牵悍庋b、繼承、多態(tài)。 封裝 封裝為私有變量創(chuàng)建公共方法,使得外部可以調(diào)用。這樣做的好處是實(shí)...
    越過山丘1024閱讀 650評(píng)論 0 0
  • Java多態(tài) 1、多態(tài)的總結(jié) 面向?qū)ο缶幊逃腥筇匦裕悍庋b、繼承、多態(tài)。 封裝隱藏了類的內(nèi)部實(shí)現(xiàn)機(jī)制,可以在不影響...
    wymhuster閱讀 777評(píng)論 0 3
  • 很多時(shí)候愛上一首歌,是因它恰好在情緒敏感的時(shí)刻出現(xiàn)。 這個(gè)年紀(jì)的我們 更珍惜難得的自由 這個(gè)年紀(jì)的我們 比起從前更...
    夢的模樣_閱讀 813評(píng)論 2 5
  • 她考大學(xué)考了兩次,有兩次失敗的婚姻,坐過牢,失去了孩子,一時(shí)之間,她一無所有,她開始了流浪。 直到她有一天收到了一...
    若晚閱讀 528評(píng)論 0 0

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