SL275之多態(tài)
多態(tài)
eg :
class A{method();}
class B extends A{method();}
A a=new B();
a.method()調(diào)用的是B的method()方法。//a.method()執(zhí)行是,應(yīng)該看引用a具體指向的內(nèi)存空間實(shí)際存在的是什么對象。從這里來看,引用a所指向的實(shí)際內(nèi)存空間是B的實(shí)例。
方法的調(diào)用具體決定于運(yùn)行時,編譯器只是檢查java語法的正誤。
通過? 對象.屬性?? 的形式來獲得屬性值時,具體返回的屬性值是依賴于對象引用的類型的。
而通過方法來獲得對象的屬性時,方法調(diào)用所返回的屬性則決定于具體內(nèi)存中存在的真正對象
。
(attention: 靜態(tài)的方法這一條不適用)
Eg:
public class TestPoly {
?public static void main(String[] args) {
?
?Father1 f=new Child1();
??????? System.out.println(f.age);//在編譯階段就已經(jīng)可以確定f.age的值是:45,因?yàn)樵诰幾g時不會生成對象,
??????????????????????????????????????????????//直接看引用類型即可,所以下面的((Child1)f).age之間看f的類型即可。
??????? System.out.println(((Child1)f).age);
??????? f.printAge();//這個需要在運(yùn)行是通過方法來決定結(jié)果,此時,f引用指向的是Child1類型的對象空間,所以調(diào)用的是Child類的pringAge()方法,從而得出結(jié)果是:90
??????((Child1)f).printAge();
????????}
}
class Father1{
?int age=45;
?public void printAge(){
??System.out.println(age);
?}
}
class Child1 extends Father1{
?int age=90;
?public void printAge(){
??System.out.println(age);
?}
}
posted on 2006-10-04 15:33 小雨不打傘 閱讀(346) 評論(0) 編輯 收藏 所屬分類: SL-275學(xué)習(xí)筆記