国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

向上轉型讀書筆記

RdouTyping / 2945人閱讀

摘要:把這種對某個對象的引用視為對其基類的引用的做法被稱作向上轉型。或者繼承或者重寫了的問題從子類向上轉型到父類,可能會縮小接口。因為向上轉型之后使用引用進行訪問,只能訪問父類定義的接口,而不能訪問自己定義的新接口。

preliminary
最近在讀Thinking in Java這篇是一個基本此書的整理。

什么是向上轉型upcast?

對象既可以作為它本身的類型使用,也可以作為它的基類類型使用(upcast)。
把這種對某個對象的引用 視為 對其基類的引用的做法被稱作向上轉型。
舉例
父類 Instrument
子類 Wind
子類重寫了play方法

javaclass Instrument {
    public void play(Note n){
        Prt.prt("Instrument.play()");
    }
}

class Wind extends Instrument{
    public void play(Note n){
        Prt.prt("Wind.play()" + n);
    }
}

public class Music {
    public static void tune(Instrument i)
    {
        i.play(Note.MIDDLE_C);
    }
    public static void main(String[] args) {
        Instrument flute = new Wind();
        tune(flute);
    }
}
output:
Wind.play() MIDDLE_C

如果一個函數的方法Music.tune()接受一個Instrument的引用,那么它同時也接受任何Instrument的子類(Wind)。
這說明Instrument的接口必定存在于Wind中。(或者繼承/或者重寫了)

upcast 的問題

從子類向上轉型到父類,可能會縮小接口。因為向上轉型之后使用Instrument引用進行訪問,只能訪問父類Instrument定義的接口,而不能訪問Wind自己定義的新接口。

為什么要用upcast?

用了upcast就會讓子類縮小接口,既然這樣,為什么要用upcast?
【減少代碼量】如果讓tune()方法接受一個Wind引用作為自己的參數,似乎更為直觀。但是,如果這樣做,就需要系統為Instrument的每種類型都編寫一個tune方法。這就意味著在開始時候,就需要更多的編程,這也意味著以后想添加類似tune()新方法,或者添加自Instrument導出的新類,仍需要做大量的工作。
【重載】此外,如果我們忘記重載某個方法,編譯器也不會返回任何錯誤info,關于類型的整個處理過程,就難以操作.

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/64170.html

相關文章

  • 《Java編程思想》讀書筆記-對象導論

    摘要:而面向對象則是向程序員提供表示問題空間中元素的工具,我們將問題空間中的元素及其在解空間中的表示稱為對象。為什么要把對象看作是服務提供者呢這是將問題分解為對象集合的一種合理方式。職能太多,可能會導致對象的內聚性降低。在試圖將子類對象當作其基類 計算機是頭腦延伸的工具,是一種不同類型的表達媒體。本文以背景性的和補充性的材料,介紹包括開發方法概述在內的面向對象程序設計(Object-orie...

    NickZhou 評論0 收藏0
  • 筆記】Java核心技術卷一讀書筆記

    摘要:構造器沒有返回值一個對象變量并沒有實際包含一個對象,而僅僅引用一個對象,如有兩個部分。子類重寫方法的返回值范圍必須小于等于父類方法的返回值。枚舉類型中可以添加一些構造器方法和域。 第三章 Java是一種強類型語言。 https://blog.csdn.net/qq_3619... 在Java中,整型的范圍與機器無關。 int 4字節 short 2字節 long ...

    weizx 評論0 收藏0
  • Java筆記 - 重寫/重載,向上轉型/向下轉型

    摘要:所以靜態方法不能被覆蓋。雖然就算你重寫靜態方法,編譯器也不會報錯。也就是說,如果你試圖重寫靜態方法,不會阻止你這么做,但你卻得不到預期的結果重寫僅對非靜態方法有用。我們應該直接使用類名來訪問靜態方法,而不要使用對象引用來訪問。 重寫/重載 重寫指的是根據運行時對象的類型來決定調用哪個方法,而不是根據編譯時的類型。所以靜態方法不能被覆蓋。 (如果從重寫方法會有什么特點來看,我們是不能...

    qqlcbb 評論0 收藏0
  • 讀書筆記(06) - 語法基礎 - JavaScript高級程序設計

    摘要:寫在開頭本篇是小紅書筆記的第六篇,也許你會奇怪第六篇筆記才寫語法基礎,筆者是不是穿越了。可移步筆者的文章中替換方式參考文檔高級程序設計作者以樂之名本文原創,有不當的地方歡迎指出。 showImg(https://segmentfault.com/img/bVblGMc?w=600&h=400); 寫在開頭 本篇是小紅書筆記的第六篇,也許你會奇怪第六篇筆記才寫語法基礎,筆者是不是穿越了。...

    iOS122 評論0 收藏0
  • 1、接口 2、多態

    摘要:接口的概念接口的概念接口是功能的集合,同樣可看做是一種數據類型,是比抽象類更為抽象的類。多態的前提是必須有子父類關系或者類實現接口關系,否則無法完成多態。 01接口的概念 * A:接口的概念 接口是功能的集合,同樣可看做是一種數據類型,是比抽象類更為抽象的類。 接口只描述所應該具備的方法,并沒有具體實現,具體的實現由接口的實現類(相當于接口的子類)來完成。這樣將功能的定...

    Magicer 評論0 收藏0

發表評論

0條評論

最新活動
閱讀需要支付1元查看
<