- 向上轉型 是面向對象繼承的一種形式,是指子類對象轉換為父類對象。
看下面的example
class Instrument { public void play() { System.out.println("Instrument play"); } static void tune(Instrument i) { // … i.play(); } } public class Test1 extends Instrument { public static void main(String [] args) { Test1 w = new Test1(); Instrument.tune(w); } } // out put Instrument play
導出類轉型為基類,在繼承圖上是向上移動的,因此一般稱為向上轉型。
在向上轉型的過程中,子類唯一可能發生的事情是丟失方法,子類的新有的方法都會丟掉。
- 向下轉型: 父類引用的對象轉換為子類類型稱為向下轉型。
看下面的代碼
class Animal { public void eat() { System.out.println("Animal eat"); } } class Dog extends Animal{ @Override public void eat() { System.out.println("Dog eat"); } public void cry() { System.out.println("Dog cry"); } } public class Test1 { public static void main(String[] args) { Animal d1 = new Dog(); d1.eat(); Dog d = (Dog) d1; d.eat(); d.cry(); Animal d2 = new Animal(); Dog d3 = (Dog) d2; d3.eat(); d3.cry(); } }
向下轉型
1、父類引用可以指向子類對象,子類引用不能指向父類對象。
2、把子類對象直接賦給父類引用叫upcasting向上轉型,向上轉型不用強制轉型。
如Father father = new Son();
3、把指向子類對象的父類引用賦給子類引用叫向下轉型(downcasting),要強制轉型。
如father就是一個指向子類對象的父類引用,把father賦給子類引用son 即Son son =(Son)father;
其中father前面的(Son)必須添加,進行強制轉換。
4、upcasting 會丟失子類特有的方法,但是子類overriding 父類的方法,子類方法有效
5、向上轉型的作用,減少重復代碼,父類為參數,調有時用子類作為參數,就是利用了向上轉型。這樣使代碼變得簡潔。體現了JAVA的抽象編程思想。