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