JAVA的向上轉型 和 向下轉型
阿新 • • 發佈:2018-11-05
- 向上轉型 是面向物件繼承的一種形式,是指子類物件轉換為父類物件。
看下面的exampleclass 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的抽象程式設計思想。