1. 程式人生 > >java中強制型別轉換

java中強制型別轉換

     在Java中,子類可以非常自然地轉換成父類,但是父類轉換成子類則需要強制轉換。因為子類擁有比父類更多的屬性、更強的功能,所以父類轉換為子類需要強制。那麼,是不是隻要是父類轉換為子類就會成功呢?其實不然,他們之間的強制型別轉換是有條件的。

    當我們用一個型別的構造器構造出一個物件時,這個物件的型別就已經確定的,也就說它的本質是不會再發生變化了。在Java中我們可以使用父類來引用它,這個時候我們是使用功能較弱的型別引用功能較強的物件,這是可行的。但是將功能較弱的型別強制轉功能較強的物件時,就不一定可以行了。

    舉個例子來說明。比如系統中存在Father、Son兩個物件。首先我們先構造一個Son物件,然後用一個Father型別變數引用它:

     Father father = new Son();

     在這裡Son 物件例項被向上轉型為father了,但是請注意這個Son物件例項在記憶體中的本質還是Son型別的,只不過它的能力臨時被消弱了而已,如果我們想變強怎麼辦?將其物件型別還原!

      Son son = (Son)father;

     這條語句是可行的,其實father引用仍然是Father型別的,只不過是將它的能力加強了,將其加強後轉交給son引用了,Son物件例項在son的變數的引用下,恢復真身,可以使用全部功能了。

     前面提到父類強制轉換成子類並不是總是成功,那麼在什麼情況下它會失效呢?  

     當引用型別的真實身份是父類本身的型別時,強制型別轉換就會產生錯誤。例如:

     Father father = new  Father();

     Son son = (Son) father;

     這個系統會丟擲ClassCastException異常資訊。

     所以編譯器在編譯時只會檢查型別之間是否存在繼承關係,有則通過;而在執行時就會檢查它的真實型別,是則通過,否則丟擲ClassCastException異常。

    所以在繼承中,子類可以自動轉型為父類,但是父類強制轉換為子類時只有當引用型別真正的身份為子類時才會強制轉換成功,否則失敗。


原文:https://www.cnblogs.com/chenssy/p/3393160.html

相關推薦

java強制型別轉換

     在Java中,子類可以非常自然地轉換成父類,但是父類轉換成子類則需要強制轉換。因為子類擁有比父類更多的屬性、更強的功能,所以父類轉換為子類需要強制。那麼,是不是隻要是父類轉換為子類就會成功呢?其實不然,他們之間的強制型別轉換是有條件的。     當我們用一個型別的

java強制型別轉換的注意

java中涉及byte、short、char型別的運算,首先這些型別的變數值會強制轉換為int型別。然後對int型別進行計算,最終得到的也是int型別,常見的將兩個short型別進行運算得到的結果也是

Java強制型別轉換的實現機制

你已經知道把一種型別的值賦給另外型別的一個變數是相當常見的。如果這2種類型是相容的,那麼Java 將自動地進行轉換。然而,不是所有的型別都是相容的,因此,不是所有的型別轉換都是可以隱式實現的。例如,沒有將double 型轉換為byte 型的定義。要達到這個目的,你必須使用一

javachar型別轉換成int型別

PlanA: char ch = '9'; if (Character.isDigit(ch)){ // 判斷是否是數字 int num = Integer.parseInt(String.valueOf(ch)); System.out.println(num); }

JavaString型別轉換成日期型別

Java中String型別轉換成資料庫中的日期型別,新增到資料庫 //建立sdf物件,指定日期格式型別 SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); //sdf將字串轉化成java.util.D

SQL SERVER強制型別轉換cast和convert的區別

selectCAST('123'asint)   -- 123selectCONVERT(int, '123')  -- 123selectCAST(123.4asint)   -- 123selectCONVERT(int, 123.4)  -- 123 selectCAST('123.4'asint)se

Java強制型別轉換與隱式型別轉換

一.隱式型別轉換 1.Java中的8大基本資料型別 java基本資料型別就8種,除了這些都是引用型的了。 java四類八種基本資料型別: 第一類:整型 byte short int long

java物件型別轉換

      在java開發中我們經常見到的為了降低程式間的耦合度,在定義某些類是通常使用的都是父型別,之後程式呼叫者就可以根據自己的需求將子型別賦值上去,實現功能上的呼叫,在這過程中就是運用了物件的向上轉型,執行時通過後期繫結來實現對實際子類的呼叫。這樣就實現了傳說中java的多型功能。然而有些時候為了完成某

SQL SERVER強制型別轉換cast和convert

在SQL SERVER中,cast和convert函式都可用於型別轉換,其功能是類似,只是語法不同。 語法: cast ( expression as data_type [ (length ) ])convert ( data_type [ ( length ) ] ,

java 常見 型別轉換 -全面-String ,char ,char[],int 之間的轉換

package pack; public class Exchange { public static void main(String [] args) { // 1 String <<<----->>int String st

java資料型別轉換

1如何將字串 String 轉換成整數 int? A. 有兩個方法: 1). int i = Integer.parseInt([String]); 或  i = Integer.parseInt([String],[int radix]); 2). int i = Integer.valueOf(m

java對於字串 XX.toString和String.valueOf()以及強制型別轉換的區別

今天在寫程式碼的時候遇到很多需要型別轉換的東西 ,特別是需要轉換到String型別。好幾次都報錯了,特此記錄一下這三者之間的區別 toString方法 先看一下API對toString方法的描述 返回該物件的字串表示。通常,toString 方法會返回一個“以文

Java學習筆記05--強制型別轉換 ;內部類(瞭解即可) ;Java異常體系及異常處理;iOS的try catch 塊

===============java相關講解============= 強制型別轉換: 基本資料型別的轉換 小資料型別---->大的資料型別 自動型別轉換 大資料型別----->小資料型別 強制型別轉換

java強制型別轉換 int轉為byte

Java中的基本型別 java中所有的基本數值型別都有正負號,所以不要去尋找無符號的數值型別。 基本型別 大小 最小值 最大值 包裝器型別 boolea

java強制型別轉換

資料型別的轉換,分為自動轉換和強制轉換。自動轉換是程式在執行過程中 “ 悄然 ” 進行的轉換,不需要使用者提前宣告,一般是從位數低的型別向位數高的型別轉換;強制型別轉換則必須在程式碼中宣告,轉換順序不受限制。 自動資料型別轉換 自動轉換按從低到高的順序轉換。不同型別資

Java 多型強制型別轉換

目前多型情況下不能訪問子類特有的成員。 如果需要訪問子類特有的成員,那麼需要進行型別強制轉換. 基本資料型別的轉換 &nbs

c#的裏氏轉換Java強制類型轉換在多態的應用

readline color extends pre pri console AS 定義 spa 在c#中: 註意: 子類並沒有繼承父類的構造函數,而是會默認調用父類那個無參數的構造函數。 如果一個子類繼承了一個父類,那麽這個子類除了可以使用自己的成員外,還可以使用從父類

Java強制型別轉換,把浮點型轉為整型

public class Basic{ public static void main(String[] args){ double a = 10.0; double b = 3.0; System.out.println("a / b = "

JavaJava強制型別轉換

/*  * 強制型別轉換:  * 如何將取值範圍小的轉換為取值型別大的  *   * 將取值範圍小的轉換為取值型別大的會丟失精度。  * */ public class Data_Convert_Manual { public static

JAVA語法——自動型別轉換強制型別轉換

package 自動型別轉換和強制型別轉換; public class 自動型別轉換和強制型別轉換 { public static void main(String[] args) { byte b = 127; char c = 'W'; short s = 23561; int