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