【发布时间】:2013-07-30 08:39:00
【问题描述】:
我真的很想了解这些的实时用途是什么:
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();
谁能帮我理解这两个概念的实时使用?
提前致谢。
【问题讨论】:
-
如果你刚开始,就这样学吧。当您编写复杂的问题并使用您会理解的模式时:-)
-
该示例显示相同的调用
ref.disp()的行为不同,具体取决于分配的对象的实际类型!你是对的,a.disp()b.disp()和c.disp()会做同样的事情,但它不会显示多态行为。
标签: java