摘要:引用數(shù)據(jù)類型轉(zhuǎn)換由的繼承和向上轉(zhuǎn)型,子類可以很自然地轉(zhuǎn)換為父類對象,即父類類型可以直接引用子類對象,但是子類類型不能直接引用父類對象,需要進行強制轉(zhuǎn)換。但是將功能較弱的類型父類強制轉(zhuǎn)功能較強的對象子類時,就不一定可以行了。
1、引用數(shù)據(jù)類型轉(zhuǎn)換:
由java的繼承和向上轉(zhuǎn)型,子類可以很自然地轉(zhuǎn)換為父類對象,即父類類型可以直接引用子類對象,但是子類類型不能直接引用父類對象,需要進行強制轉(zhuǎn)換。子類比父類擁有更多的屬性和更強的功能,這個時候我們使用功能較弱的類型(父類)引用功能較強的對象(子類),這是可行的。但是將功能較弱的類型(父類)強制轉(zhuǎn)功能較強的對象(子類)時,就不一定可以行了。
向上轉(zhuǎn)型,子類對象將引用賦予父類類型, java允許一個對象可以不被其對應(yīng)的類型所引用,而被其父類類型引用,從而可以使用其父類類型,父類引用無法調(diào)用子類對象中父類沒有的方法,向上轉(zhuǎn)型會有子類特性丟失。如:father.fat(),father中只能調(diào)用fat()方法,而無法調(diào)用so()方法。若需要使用其原對象特性,這時就需要向下轉(zhuǎn)型了,用一個它本身類型的變量來引用它。
向下轉(zhuǎn)型是可以成功的,如:(Son)father,①中的向下轉(zhuǎn)型失敗是因為father本身的對象是Father,強制轉(zhuǎn)換會使作用域溢出(ClassCastException:當(dāng)前者的域小于后者的時候出現(xiàn)),而②中father本身就是Son對象,(Son)father只是讓其恢復(fù)本身特性,所以是可以成功的。但是說到底父類對象還是無法轉(zhuǎn)換為子類所引用。父類引用可以指向子類對象,但是子類引用卻不能指向父類對象。
當(dāng)我們用一個類型的構(gòu)造器構(gòu)造出一個對象時,這個對象的類型就已經(jīng)確定的,也就說它的本質(zhì)是不會再發(fā)生變化了。如:father被賦予的是Son類的對象,所以father調(diào)用的fat()方法是Son對象中的fat()方法,Son對象即使被賦予給了father類型,但其本身還是Son對象,調(diào)用的方法還是原對象中的方法。
public class Father { public void fat(){ System.out.println("I`m father"); } } public class Son extends Father { public void fat(){ System.out.println("I`m a father of my son"); } public void so() { System.out.println("I`m son"); } } public class TypeStrong { public static void main(String[] args) { Son son = new Son(); Father father = son;//向上轉(zhuǎn)型,父類引用指向了子類對象,此時子類對象的類型為父類引用的類型 father.fat();//只能調(diào)用fat()方法,無法調(diào)用so()方法,且fat()輸出為:I`m a father of my son father = (Son) father;//依然無法調(diào)用so()方法,因為father為Father類型 ((Son) father) .so();//終于可以調(diào)用了... // Father father2 = new Father(); // Son son2 = (Son) father2;//①運行出錯,ClassCastException,父類對象不能為子類的類型引用 Son son2 = (Son) father;//②運行成功,向下轉(zhuǎn)型,將原本父類引用賦予到子類引用上,當(dāng)然此時還是子類對象為子類的類型引用 } }2、基本數(shù)據(jù)類型轉(zhuǎn)換:
將一種類型的數(shù)據(jù)賦給另外一種類型變量時,滿足下列兩種要求將執(zhí)行自動類型轉(zhuǎn)換:1.兩種類型是兼容的 ;2.目的類型的范圍比來源類型大 。
數(shù)值類基本數(shù)據(jù)類型按照范圍大小可分為:byte,short,char,int,long,float,double
數(shù)值類數(shù)據(jù)類型和字符類數(shù)據(jù)類型、布爾類數(shù)據(jù)類型不兼容,字符類數(shù)據(jù)類型和布爾類數(shù)據(jù)類型互相也不兼容。
注意:
byte、short、char類型進行 + 操作,最后得出的結(jié)果為int數(shù)據(jù)類型
字符類數(shù)據(jù)類型與數(shù)值類數(shù)據(jù)類型進行 + 操作,最后得出的結(jié)果為字符類數(shù)據(jù)類型
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/71087.html
摘要:對象數(shù)組都是引用數(shù)據(jù)類型。低高數(shù)據(jù)類型轉(zhuǎn)換必須滿足如下規(guī)則不能對類型進行類型轉(zhuǎn)換。強制類型轉(zhuǎn)換條件是轉(zhuǎn)換的數(shù)據(jù)類型必須是兼容的。聲明變量的基本格式如下格式說明為數(shù)據(jù)類型。但為了對類的使用者可見,大多數(shù)靜態(tài)變量聲明為類型。 變量就是申請內(nèi)存來存儲值。也就是說,當(dāng)創(chuàng)建變量的時候,需要在內(nèi)存中申請空間。 內(nèi)存管理系統(tǒng)根據(jù)變量的類型為變量分配存儲空間,分配的空間只能用來儲存該類型數(shù)據(jù)。 因此,...
摘要:剛開始學(xué)習(xí)的時候,可能是一頭霧水,不知道從何學(xué)起。這個教程總體來說就像列文虎克教學(xué),細到極致,妙到毫巔。適合絕對零基礎(chǔ)的,每個知識點掰開了揉碎了講解。 剛開始學(xué)習(xí)java的時候,可能是一頭霧水,不知道從何學(xué)起。還有很多Java小白,在剛自學(xué)Java的時候玩命的學(xué)習(xí),玩命的記住Java原理,天天早上五點起床背Java的一些英...
摘要:局部變量聲明在函數(shù)內(nèi)部的變量。在作用域范圍內(nèi)不能出現(xiàn)命名沖突。 java編程規(guī)范: 1.良好的標(biāo)識符的命名 保留字不能作為標(biāo)識符命名: class、public、static..., goto,const 區(qū)分大小寫:helloWorld、HelloWorld 2.良好的注釋習(xí)慣 3.良好的縮進:沒遇到一個代碼塊縮進一次(一個tab鍵) 變量:代...
摘要:自動拆箱用賦值運算符把一個包裝類賦值給一個基本類型變量,或者是在包裝類進行數(shù)值運算時。指數(shù)計數(shù),表示的冪按位操作符可以把值看成單比特值對待,的操作相同,但是不能用于布爾值。移位操作符高位包括符號位舍棄,低位補零。 點擊進入我的博客 3.1更簡單的打印語句 System.out.println(imbug); 通過編寫一個小類庫,并通過import static該方法來實現(xiàn)簡化打印(基...
摘要:位置的使用運算符后置時,先使用變量原有值參與運算操作,運算操作完成后,變量的值自增或者自減,運算符前置時,先將變量的值自增或者自減,然后使用更新后的新值參與運算操作。 1.JRE:是Java語言的運行環(huán)境,它包含了Java虛擬機,也就是JVM,同時還包含了Java語言運行需要的核心類庫。對于這個類庫,大家先理解為資料庫就行,后面學(xué)完面向?qū)ο螅憔兔靼琢恕DK:是Java語言的開發(fā)工具...
閱讀 2080·2021-11-24 10:34
閱讀 3055·2021-11-22 11:58
閱讀 3712·2021-09-28 09:35
閱讀 1724·2019-08-30 15:53
閱讀 2771·2019-08-30 14:11
閱讀 1551·2019-08-29 17:31
閱讀 542·2019-08-26 13:53
閱讀 2142·2019-08-26 13:45