以下Animal為父類,Dog,Cat作為子類,分別繼承Animal
class Animal{ public void shout(){ System.out.println("叫了一聲"); } } class Dog extends Animal{ public void shout() { System.out.println("旺旺旺"); } public void seeDoor() { System.out.println("看門中"); } } class Cat extends Animal{ public void shout() { System.out.println("喵喵喵"); } }
總結:
1. Dog對象轉成Animal對象可行,如d2
Cat對象轉成Animal對象可行,如c2
2. d2作為Animal對象轉成Dog對象可行。如d3,且可執行一個Dog特有的方法
3. c2作為Animal對象轉成Dog對象,編譯通過,運行報錯,顯示 java.lang.ClassCastException,類型轉化出錯
實例代碼:
1. Dog對象轉成Animal對象可行,如d2
Cat對象轉成Animal對象可行,如c2
public class TestPoym{ public static void main(String[] args) { Dog d1 = new Dog(); animalCry(d1); Animal d2 = new Dog(); //向上轉型 animalCry(d2);
Animal c1 = new Cat();
animalCry(c1);
Animal c2 = new Cat();
animalCry(c2);
} static void animalCry(Animal a) { a.shout(); } }
結果:

2. d2作為Animal對象轉成Dog對象可行。如d3,且可實現一個Dog特有的方法,看門
public class TestPoym{ public static void main(String[] args) { Dog d1 = new Dog(); animalCry(d1); Animal d2 = new Dog(); //向上轉型 animalCry(d2); Animal c1 = new Cat(); animalCry(c1); Animal c2 = new Cat(); animalCry(c2); Dog d3 = (Dog)d2; //向下轉型 d3.seeDoor(); } static void animalCry(Animal a) { a.shout(); } }
結果:

3. c2作為Animal對象轉成Dog對象,編譯通過,運行報錯,顯示 java.lang.ClassCastException,類型轉化出錯
代碼:
public class TestPoym{ public static void main(String[] args) { Dog d1 = new Dog(); animalCry(d1); Animal d2 = new Dog(); //向上轉型 animalCry(d2); Animal c1 = new Cat(); animalCry(c1); Animal c2 = new Cat(); animalCry(c2); Dog d3 = (Dog)d2; //向下轉型 d3.setDoor(); Dog c3 = (Dog)c2; //編譯通過,運行出錯,顯示強制轉換出錯 } static void animalCry(Animal a) { a.shout(); } }
結果:

