摘要:我們知道中子類轉換成父類是沒有任何問題的,那父類可以轉換成子類嗎來看下面這段程序結果是報類轉異常轉換正常。所以,想讓父類強制轉換成子類,不是沒有可能,除非父類是子類構造出來的實例,不然是不能強轉的。
最近,微信群友在討論子類父類的轉換問題,其實不難,給大家用實例來說明一下就很明了了。
我們知道Java中子類轉換成父類是沒有任何問題的,那父類可以轉換成子類嗎?
來看下面這段程序:
public class TestObjectConvert { public static void main(String[] args) { test1(); test2(); } private static void test1() { Fruit fruit1 = new Fruit(); Apple apple1 = new Apple(); apple1 = (Apple) fruit1; // java.lang.ClassCastException } private static void test2() { Fruit fruit1 = new Apple(); Apple apple1 = new Apple(); apple1 = (Apple) fruit1; } static class Fruit { } static class Apple extends Fruit { } }
結果是:
test1:報類轉異常; test2:轉換正常。
所以,想讓父類強制轉換成子類,不是沒有可能,除非父類是子類構造出來的實例,不然是不能強轉的。
為什么呢?
如上代碼,如果父類實例出來的對象是Orange,Orange當然不能強制轉成Apple,所以說父類只有該子類對應的實例才能強轉。
推薦閱讀干貨:Spring Boot & Cloud 最強技術教程
工具:推薦一款在線創作流程圖、思維導圖軟件
分享Java干貨,高并發編程,熱門技術教程,微服務及分布式技術,架構設計,區塊鏈技術,人工智能,大數據,Java面試題,以及前沿熱門資訊等。
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/71388.html
摘要:快速了解繼承在的繼承關系里子類可以從獲取父類的所有的公共和受保護成員字段方法和內部類。阻止繼承有些情況下,我們可能不希望子類覆蓋父類的方法,這時候,用關鍵字修飾方法即可實現該目的。 和現實世界中:子女可以繼承父母的一些特征(如:基因)、財產等一樣。OOP 中也有提供類似的特性,一個類完全可以從其它類里獲得一些屬性和方法,而不需要我們自己重新定義。這種特性簡單但強大 (Simple an...
摘要:定義按照慣例,首先我們來看一下里氏替換原則的定義。同樣覆蓋了父類的非抽象方法,并將邏輯更改為跳舞,這要是違背了里氏替換原則的。而重寫顯然是不符合里氏替換原則的。里氏替換原則的核心思想就是繼承,所以優點就是繼承的優點。 showImg(https://user-gold-cdn.xitu.io/2018/9/19/165f1897234ef1d4?w=600&h=350&f=jpeg&s...
摘要:概念所謂多態,就是指一個引用變量類型在不同的情況下的多種狀態。需進行強制轉換有風險,最好使用進行判斷。繼承在多態中必須存在有繼承關系的子類和父類。在中有兩種形式可以實現多態繼承和接口。 概念 所謂多態,就是指一個引用變量(類型)在不同的情況下的多種狀態。也可以理解為,多態是指通過指向父類的指針,來調用在不同子類中實現的方法。多態性是對象多種表現形式的體現 多態性嚴格來說有兩種描述形式:...
摘要:所以靜態方法不能被覆蓋。雖然就算你重寫靜態方法,編譯器也不會報錯。也就是說,如果你試圖重寫靜態方法,不會阻止你這么做,但你卻得不到預期的結果重寫僅對非靜態方法有用。我們應該直接使用類名來訪問靜態方法,而不要使用對象引用來訪問。 重寫/重載 重寫指的是根據運行時對象的類型來決定調用哪個方法,而不是根據編譯時的類型。所以靜態方法不能被覆蓋。 (如果從重寫方法會有什么特點來看,我們是不能...
閱讀 917·2021-11-24 09:38
閱讀 925·2021-11-23 09:51
閱讀 2939·2021-11-16 11:44
閱讀 1762·2021-09-22 15:52
閱讀 1626·2021-09-10 11:20
閱讀 1361·2019-08-30 13:47
閱讀 1292·2019-08-29 12:36
閱讀 3293·2019-08-26 10:43