我真的很想理解這些實時使用是什麼:爲什麼動態方法派遣和超類派可以引用一個子類對象?
1.什麼是Java概念的使用 - 「超類變量可以引用子類對象」? 即使這樣做,SuperClass變量只能用於訪問由SuperClass定義的對象的那些部分,但不能訪問子類成員。甚至可以通過子類對象來實現。
2.動態方法調度需要什麼?我有下面的例子:
class A
{
void disp()
{
System.out.println("in A");
}
}
class B extends A
{
void disp()
{
System.out.println("in B");
}
}
class C extends A
{
void disp()
{
System.out.println("in C");
}
}
public class mainclass
{
public static void main(String[] args)
{
A a= new A();
B b=new B();
C c=new C();
A ref;
ref=b;
ref.disp();//calls class B method
ref=c;
ref.disp();//calls class C method
ref=a;
ref.disp();//calls class A method
}
}
這上面的代碼通過分配不同的子類對象的父類引用變量使用動態方法分派。 我的問題是爲什麼要使用「ref」併爲其分配對象,然後調用函數?我們可以調用子類函數,即使不使用這個「ref」和對象分配(動態分派)。
我們可以這樣調用也:
a.disp();//calls A method
b.disp();//calls B method and so on.
c.disp();
誰能幫我瞭解實時使用這兩個概念?
在此先感謝。
如果你剛開始,只是學習這種方式。當你編寫複雜的問題,並使用模式,你會明白:-) – Ankit
http://en.wikipedia.org/wiki/Polymorphism_(computer_science) – fGo
這個例子是顯示相同的調用'ref.disp() '行爲不同,取決於分配的對象的實際類型!你是對的,'a.disp()''b.disp()'和'c.disp()'會做同樣的事情,但它不會顯示多態行爲。 –