以前徒弟問了一個問題, 在Java中, 父類對象到底能不能轉換成對應的子類對象?this
到底能不能, 今天就來講說這個問題, 先看下面一段代碼:spa
package cn.com.hanbinit.test; /** * 檢驗父類是否能夠強轉爲子類 * @author icer * */ public class ConvertPro extends Father { public static void main(String[] args) { Father father = new Father(); Father father1 = new ConvertPro(); ConvertPro son = new ConvertPro(); // ConvertPro son1 = (ConvertPro) new Father(); // son = (ConvertPro)father; son = (ConvertPro) father1; } } /** * 父類 * * @author icer * */ class Father { private String name; public String getName() { return name; } public void setName(String name) { this.name = name; } }
上面代碼註釋掉的兩行是會運行錯誤的. 根據代碼顯示, 只有咱們的父類對象自己就是用子類new出來的時候, 才能夠在未來被強制轉換爲子類對象.code
子類繼承父類的全部(包括屬性以及方法), 也就是說子類包含的內容應該是比父類要大的. 若是正常環境下, 把一個父類轉換成子類必定會損失精度. 可是若是父類對象自己就是用對象
子類去new出來的, 就相似於一個原本就是兒子角色的人, 去裝了一下子父親, 這個角色是能夠在將來轉換回去的, 可是一個父親, 永遠不可能去裝兒子的.blog