詞條簡介
這是面向對象(c# Java AS3.0)編程(oop)中多態的方面,分為向上轉型和向下轉型。
假定父類為 動物,子類為狗,父類有一個方法發聲(),狗繼承並覆蓋了一個發聲方法。在子類重寫該方法
則(以下過程c#實現):動物 a=new 狗();//這就為向上轉型a.發聲();
在調用 a.發聲();時調用的是狗的發聲()也可調動物類其他方法 但不能調用狗類方法
若修改為動物 a=new 狗();
狗b=(狗)a;//這裡向下轉型
這時b可調用動物類未被重寫的方法和狗類所有方法(包括重寫動物類的方法)
向上轉型都會成功,是安全的。 就像說狗是動物沒問題。
接上面
動物 a=new 動物();
a.發聲();//調動物類方法
狗 b=(狗)a;//這也是向下轉型 但下面通過b若調用 動物 或 狗類中任意方法都報異常
也就是說向下轉型可能會出錯 不能說動物是狗
程式調用方式
JAVA 中的一種調用方式
class A{
void f(){}
void g(){}
}
class B extends A{
void g(){}
void i(){}
}
public class C{
public static void main(String[] args){
A a=new B(); //B自動向上轉型為A的對象
}
}
向上轉型並非是將B自動向上轉型為A的對象,相反它是從另一種角度去理解向上兩字的:它是對A的對象的方法的擴充,即A的對象可訪問B從A中繼承來的和B複寫A的方法。其它的方法都不能訪問。即使是A 中的私有成員方法。