1. 程式人生 > >java上轉型物件的好處

java上轉型物件的好處

向上轉型是子類物件當成父類物件來使用,也就可以這樣理解,父類引用指向子類物件。
那麼比如有一個方法m,它傳的引數是父類的型別,m(father f),執行的父類中已有的某個方法而你實際傳的是它的子類 son,如果子類中有重寫父類的方法,那麼java機制就會自動的執行子類的那個方法。想象下,如果你不用父類物件引用,那麼你實現每個動物的m方法的時候都要去寫一次,而用了這個,java自動判斷實際上是哪個物件就用哪個的方法。而且你如果新增別的子類,也只需要重寫出這個類和重寫的父類方法就可以了,否則你還要去改m方法。也就是說,向上轉型體現了面向物件的特點,也增加了程式的擴充套件性。 
追問: 新增子類要去改M方法什麼意思?不都是就覆蓋父類方法嗎?有沒有向上轉型都是覆蓋,有什麼區別?
 回答: 父類的方法不能滿足子類的需求,子類就重寫它阿。甚至我們可以把父類的方法定義成抽象方法,父類定義成抽象類,那麼父類的方法就只需定義,不需要實現,具體實現由子類實現。我上面舉例是為了說明,當方法中呼叫父類的引用,指向子類物件時,實際上自動執行了子類重寫的方法。如果不是這樣,你穿到方法的型別你寫什麼能滿足全部的子類??是不是所有子類都需要去判斷,去寫?向上轉型就不需要寫了你自己看看你的追問,很難理解。
 追問: 是不是父類把所有子類覆蓋父類的方法歸集起來,當增加一個子類時就可以去直接呼叫父類的方法? 
回答: 你說的不準確,只能說父類裡的方法子類都有權利去繼承,除了private的,都可以去訪問。父類的方法不可能滿足所有的子類,所以子類中就會出現重寫父類的方法。那麼定義如下:class Animal {public void voice() {System.out.println("動物的叫聲");}}貓屬於一種動物從動物類繼承class Cat extends Animal {public void voice() {System.out.println("貓叫聲")}在另一個類裡定義一個方法,聽到的叫聲 hearvoid hear(Animal a) { a.voice}傳進來的是Animal的引用,但實際上傳進來的是什麼物件就是什麼物件的聲音。

相關推薦

java轉型物件的好處

向上轉型是子類物件當成父類物件來使用,也就可以這樣理解,父類引用指向子類物件。那麼比如有一個方法m,它傳的引數是父類的型別,m(father f),執行的父類中已有的某個方法而你實際傳的是它的子類 son,如果子類中有重寫父類的方法,那麼java機制就會自動的執行子類的那個方

java基礎----物件轉型物件

定義:即可以用父類的引用來引用子類物件(反之不可) 例如:      人類  人 = new  男人();       //即男人一定是人,而人不

JAVA學習筆記 物件轉型物件(子類物件當作父類物件來使用)

  世界萬物無非就是吃喝玩樂繁衍生息,傳宗接代是重中之重,這樣長久以來就構成了我們地球上的生態系統,java也是這樣,只不過這裡面更加直接和純粹,就用學生和人類做一下例子,學生一定是人類對吧?(苗紅根正的當代優秀青年不相信怪力亂神)所以說人類一定就是學生的父類,學生就是人類的子類。大圓之中

java入門-物件轉型物件

我剛接觸是覺得這個概念有點抽象,然後百度收集了一下。我對這概念的理解為:       向上轉型是:父類物件引用子類物件                   方向思維:若沒有物件的上轉型時,不如有一個類是生物,類裡有個方法m,裡面有兩個的動物為生物的子類,如狗,貓......

java中的轉型物件

一、定義:類B是類A的子類A a;a=new B();或者A a;B b=new B();a=b;二、性質:1、物件的上轉型物件的實質是子類負責建立的,但上轉型物件會失去原物件的一些屬性和功能。2、上轉型物件不能操作子類宣告定義的成員變數,也不能使用子類宣告定義的方法。3上轉

Java轉型和下轉型

tin tle cells 簡單 直接 父類引用 log pad fat Java 轉型問題其實並不復雜,只要記住一句話:父類引用指向子類對象。 什麽叫父類引用指向子類對象,且聽我慢慢道來. 從2個名詞開始說起:向上轉型(upcasting) 、向下轉型(do

抽象類和物件轉型物件

答答租車系統(面向物件綜合練習) Time Limit: 1000MS  Memory Limit: 65536KB Submit  Statistic  Discuss Problem Descr

java之上轉型物件

1. 上轉型物件 上轉型物件是將子類的物件賦值給父類的引用,形如: SuperClass sup = subClass; 上轉型物件不能使用子類新增成員(包括成員變數,成員方法),只能使用子類重寫父類的方法, 被子類隱藏的父類變數;子類未重寫的父類方法,未被隱藏的父類成員變

重寫——轉型物件不能操作子類新增成員變數和方法但可以操作子類繼承和重寫的方法

上轉型物件不能操作子類新增成員變數和方法但可以操作子類繼承和重寫的方法 子類重寫父類的前提是;方法名一樣,引數型別和個數一樣。 舉一例可以說明之:  class Father { public Father() { }public void shout(Object word

Java(下)轉型物件

上轉型物件 上轉型物件就是宣告一個父類的引用指向子類的例項化物件,例如 A a = new B(); 或者 B b = new B() ; A a = b ; 其中 A 是 B 的父類, 物件 a 就是上轉型物件 那麼為什麼需要上轉型物件,其實就是滿足一種需求,關於這個需求的內容,就

Java基礎之面向物件的方法引數和物件轉型

 本篇部落格著重說明方法的引數傳遞機制和 物件上轉型,作為前幾篇部落格的續貂之作,當然面向物件我還沒有回顧完呢。言歸正傳。 一、方法的引數傳遞機制 1.1說明:java裡的方法不能單獨存在,呼叫方法必須使用類或者物件作為主調者。 如果宣告的方法有形式引數宣告,則在呼叫時必

java物件

Java堆上的物件 1.物件的建立(new Object) 建立過程:先檢查能否在常量池中定位到一個類的符號引用,並且檢查其代表的類是否被載入、解析和初始化過;若無,執行類載入過程;然後為新生物件分配記憶體(類載入完成後即可確定物件大小);記憶體分配完後,記憶體空間初始化

學習Java之對物件宣告型別的轉型的一點點感覺

昨天,我寫程式的時候,編譯時,編譯器報了一個錯誤:Object型別不能賦予String型別變數。 程式如下: Iterator iterator = myList.iterator(); while(iterator.hasNext()) { //String str = itrat

Java學習——轉型

學習向上轉型和向下轉型怎麼用沒多難,但是為什麼那樣用,我搞了很多次沒弄明白。沒弄明白的原因是平時學習時之看例子,而例子一般都比較簡單,沒有物件之間的呼叫,一般就是一個物件呼叫自己的方法。       首先看下怎麼用轉型。       要轉型,首先要有繼承。繼承是面嚮物件語

實戰JAVA虛擬機器:在TLAB分配物件

TLAB全稱是Thread Local Allocation Buffer 即執行緒本地分配快取,從名字上看是一個執行緒專用的記憶體分配區域。 為什麼需要TLAB這個區域呢?這是為了加速物件分配而生的。由於物件一般會分配在堆上,而堆是全域性共享的。所以存在多個執

Java向上轉型與向下轉型(子類的物件賦給父類的)

一.定義:    通俗理解向上轉型:    就是子類轉型成父類。   classA   {   }   classBextendsA   {   }   A b=new B();   這個就是向上轉型。   向上轉型可以像下面這條語句這麼簡單:   Shape s =new Circle();   這裡,建

通過抽象工廠模式再理解java轉型

最近在學習抽象工廠模式的時候,看到了他的優點之一---分離了具體的類。抽象工廠模式幫助你控制一個應用建立的物件的類,因為一個工廠封裝建立產品物件的責任和過程。 它將客戶和類的實現分離,客戶通過他們的抽象介面操縱例項,產品的類名也在具體工廠的實現中被分離,它們不出現在客戶程式碼中。 一個抽象的工廠的介面 pub

【效能優化】面試官:Java中的物件都是在堆分配的嗎?

## 寫在前面 > 從開始學習Java的時候,我們就接觸了這樣一種觀點:Java中的物件是在堆上建立的,物件的引用是放在棧裡的,那這個觀點就真的是正確的嗎?如果是正確的,那麼,面試官為啥會問:“Java中的物件就一定是在堆上分配的嗎?”這個問題呢?看來,我們從接觸Java就被灌輸的這個觀點值得我們懷疑

java傳附件,批量下載附件(一)

too 批量 download pack indexof req || private reader 上傳附件代碼:借助commons-fileupload-1.2.jar package com.str; import java.io.BufferedInputStrea

Java傳大文件

error dsi ktr word nbsp comment buffer bytes part 看了日誌,錯誤為: 1 java.lang.OutOfMemoryError Java heap space 上傳文件代碼如下: