欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

java 多態(tài)性詳解及常見面試題

 更新時間:2016年11月14日 14:51:57   投稿:lqh  
這篇文章主要介紹了java 多態(tài)性詳解及常見面試題的相關(guān)資料,這里對java 的多態(tài)性做了資料整理,并列舉常見的關(guān)于多態(tài)性的面試題,需要的朋友可以參考下

java多態(tài)性

多態(tài)分兩種:

(1)   編譯時多態(tài)(設(shè)計(jì)時多態(tài)):方法重載。

(2)   運(yùn)行時多態(tài):JAVA運(yùn)行時系統(tǒng)根據(jù)調(diào)用該方法的實(shí)例的類型來決定選擇調(diào)用哪個方法則被稱為運(yùn)行時多態(tài)。(我們平時說得多的事運(yùn)行時多態(tài),所以多態(tài)主要也是指運(yùn)行時多態(tài))

運(yùn)行時多態(tài)存在的三個必要條件:

一、要有繼承(包括接口的實(shí)現(xiàn));
二、要有重寫;
三、父類引用指向子類對象。

多態(tài)的好處:

1.可替換性(substitutability)。多態(tài)對已存在代碼具有可替換性。例如,多態(tài)對圓Circle類工作,對其他任何圓形幾何體,如圓環(huán),也同樣工作。

2.可擴(kuò)充性(extensibility)。多態(tài)對代碼具有可擴(kuò)充性。增加新的子類不影響已存在類的多態(tài)性、繼承性,以及其他特性的運(yùn)行和操作。實(shí)際上新加子類更容易獲得多態(tài)功能。例如,在實(shí)現(xiàn)了圓錐、半圓錐以及半球體的多態(tài)基礎(chǔ)上,很容易增添球體類的多態(tài)性。

3.接口性(interface-ability)。多態(tài)是超類通過方法簽名,向子類提供了一個共同接口,由子類來完善或者覆蓋它而實(shí)現(xiàn)的。如圖8.3 所示。圖中超類Shape規(guī)定了兩個實(shí)現(xiàn)多態(tài)的接口方法,computeArea()以及computeVolume()。子類,如Circle和Sphere為了實(shí)現(xiàn)多態(tài),完善或者覆蓋這兩個接口方法。

4.靈活性(flexibility)。它在應(yīng)用中體現(xiàn)了靈活多樣的操作,提高了使用效率。

5.簡化性(simplicity)。多態(tài)簡化對應(yīng)用軟件的代碼編寫和修改過程,尤其在處理大量對象的運(yùn)算和操作時,這個特點(diǎn)尤為突出和重要。

注意:優(yōu)先級從高到低:this.show(O)、super.show(O)、this.show((super)O)、super.show((super)O)。

相關(guān)面試題:

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

 (二)問題:以下輸出結(jié)果是什么?

        A a1 = new A();
        A a2 = new B();
        B b = new B();
        C c = new C();
        D d = new D();
        System.out.println(a1.show(b));   ①
        System.out.println(a1.show(c));   ②
        System.out.println(a1.show(d));   ③
        System.out.println(a2.show(b));   ④
        System.out.println(a2.show(c));   ⑤
        System.out.println(a2.show(d));   ⑥
        System.out.println(b.show(b));     ⑦
        System.out.println(b.show(c));     ⑧
        System.out.println(b.show(d));     ⑨ 

(三)答案

              ①   A and A
              ②   A and A
              ③   A and D
              ④   B and A
              ⑤   B and A
              ⑥   A and D
              ⑦   B and B
              ⑧   B and B
              ⑨   A and D

分析:

做這種題的話要時時刻刻使用那個優(yōu)先級順序:

對于第一題:

a1是A類的一個實(shí)例化對象,所以this指向A,然后查找this.show(b),由于沒有這個方法,所以到super.show(b),但是由于A類沒有超類了,所以到this.show(super b),由于b的超類是A,所以相當(dāng)于this.show(A),然后在A類中查找到了這個方法,于是輸出A and A。

對于第二題:

同樣,a1是A類的實(shí)例化對象,所以this指向A,然后在A類中查找this.show(C)方法,由于沒有這個方法,所以到了super.show(C),由于A類的超類里面找,但是A沒有超類,所以到了this.show(super C),由于C的超類是B所以在A類里面查找this.show(B)方法,也沒找到,然后B也有超類,就是A,所以查找this.show(A),找到了,于是輸出A and A;

對于第三題:

同樣,a1是A類的實(shí)例化對象,所以this指向A,然后在A類中找到this.show(D)方法,找到了,所以就輸出A and D;

對于第四題:

a2是B類的引用對象,類型為A,所以this指向A類,然后在A類里面找this.show(B)方法,沒有找到,所以到了super.show(B),由于A類沒有超類,所以到了this.show(super B),B的超類是A,即super B = A,所以執(zhí)行方法this。show(A),在A方法里面找show(A),找到了,但是由于a2是一個類B的引用對象,而B類里面覆蓋了A類的show(A)方法,所以最終執(zhí)行的是B類里面的show(A)方法,即輸出B and A;

對于第五題:

a2是B類的引用對象,類型為A,所以this指向A類,然后在A類里面找this.show(C)方法,沒有找到,所以到了super.show(C)方法,由于A類沒有超類,所以到了this.show(super C),C的超類是B,所以在A類里面找show(B),同樣沒有找到,發(fā)現(xiàn)B還有超類,即A,所以還繼續(xù)在A類里面找show(A)方法,找到了,但是由于a2是一個類B的引用對象,而B類里面覆蓋了A類的show(A)方法,所以最終執(zhí)行的是B類里面的show(A)方法,即輸出B and A;

對于第六題:

a2是B類的引用對象,類型為A,所以this指向A類,然后在A類里面找this.show(D)方法,找到了,但是由于a2是一個類B的引用對象,所以在B類里面查找有沒有覆蓋show(D)方法,沒有,所以執(zhí)行的是A類里面的show(D)方法,即輸出A and D;

對于第七題:

b是B類的一個實(shí)例化對象,首相執(zhí)行this.show(B),在B類里面找show(B)方法,找到了,直接輸出B and B;

對于第八題:

b是B類的一個實(shí)例化對象,首相執(zhí)行this.show(C),在B類里面找show(C)方法,沒有找到,所以到了super.show(c),B的超類是A,所以在A類中找show(C)方法,沒有找到,于是到了this.show(super C),C的超類是B,所以在B類中找show(B)f方法,找到了,所以執(zhí)行B類中的show(B)方法輸出B and B;

對于第九題:

b是B類的一個實(shí)例化對象,首相執(zhí)行this.show(D),在B類里面找show(D)方法,沒有找到,于是到了super.show(D),B的超類是A類,所以在A類里面找show(D)方法,找到了,輸出A and D;

這是我看過網(wǎng)上的題目之后總結(jié)出來的方法,希望對大家有好處。

感謝閱讀,希望能幫助到大家,謝謝大家對本站的支持!

相關(guān)文章

  • 通過Maven進(jìn)行jedis連接redis的實(shí)現(xiàn)

    通過Maven進(jìn)行jedis連接redis的實(shí)現(xiàn)

    這篇文章主要介紹了通過Maven進(jìn)行jedis連接redis的實(shí)現(xiàn),具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-07-07
  • 基于java實(shí)現(xiàn)一個脫敏組件

    基于java實(shí)現(xiàn)一個脫敏組件

    這篇文章主要為大家詳細(xì)介紹了如何基于java實(shí)現(xiàn)一個脫敏組件,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2024-11-11
  • java基礎(chǔ)類型源碼解析之多角度講HashMap

    java基礎(chǔ)類型源碼解析之多角度講HashMap

    這篇文章主要給大家介紹了關(guān)于java基礎(chǔ)類型源碼解析之HashMap的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家學(xué)習(xí)或者使用java基具有一定的參考學(xué)習(xí)價值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-07-07
  • Spring Boot 配置文件詳解(小結(jié))

    Spring Boot 配置文件詳解(小結(jié))

    Spring Boot提供了兩種常用的配置文件,分別是properties文件和yml文件。本章重點(diǎn)介紹yml的語法和從配置文件中取值。小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-04-04
  • 淺析我對 String、StringBuilder、StringBuffer 的理解

    淺析我對 String、StringBuilder、StringBuffer 的理解

    StringBuilder、StringBuffer 和 String 一樣,都是用于存儲字符串的。這篇文章談?wù)勑【帉tring、StringBuilder、StringBuffer 的理解,感興趣的朋友跟隨小編一起看看吧
    2020-05-05
  • 詳解Java中的字節(jié)碼增強(qiáng)技術(shù)

    詳解Java中的字節(jié)碼增強(qiáng)技術(shù)

    字節(jié)碼增強(qiáng)技術(shù)就是一類對現(xiàn)有字節(jié)碼進(jìn)行修改或者動態(tài)生成全新字節(jié)碼文件的技術(shù)。本文將通過示例詳細(xì)說說Java的字節(jié)碼增強(qiáng)技術(shù),需要的可以參考一下
    2022-10-10
  • 詳解Java分布式緩存系統(tǒng)中必須解決的四大問題

    詳解Java分布式緩存系統(tǒng)中必須解決的四大問題

    分布式緩存系統(tǒng)是三高架構(gòu)中不可或缺的部分,極大地提高了整個項(xiàng)目的并發(fā)量、響應(yīng)速度,但它也帶來了新的需要解決的問題,分別是: 緩存穿透、緩存擊穿、緩存雪崩和緩存一致性問題。本文將詳細(xì)講解一下這四大問題,需要的可以參考一下
    2022-04-04
  • Mybatis3中方法返回生成的主鍵:XML,@SelectKey,@Options詳解

    Mybatis3中方法返回生成的主鍵:XML,@SelectKey,@Options詳解

    這篇文章主要介紹了Mybatis3中方法返回生成的主鍵:XML,@SelectKey,@Options,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-01-01
  • SpringBoot自動配置與啟動流程詳細(xì)分析

    SpringBoot自動配置與啟動流程詳細(xì)分析

    這篇文章主要介紹了SpringBoot自動配置原理分析,SpringBoot是我們經(jīng)常使用的框架,那么你能不能針對SpringBoot實(shí)現(xiàn)自動配置做一個詳細(xì)的介紹。如果可以的話,能不能畫一下實(shí)現(xiàn)自動配置的流程圖。牽扯到哪些關(guān)鍵類,以及哪些關(guān)鍵點(diǎn)
    2022-11-11
  • springcloud gateway聚合swagger2的方法示例

    springcloud gateway聚合swagger2的方法示例

    這篇文章主要介紹了springcloud gateway聚合swagger2的方法示例,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-04-04

最新評論