在Dynamic Method Dispatch Example方面需要帮助

时间:2011-10-26 10:53:54

标签: java inheritance

我需要有关此Java程序示例的帮助。这个例子来自书中 Java:Herbert Schildt的第七版。

我对这个程序几乎没有怀疑,也怀疑本书中写的文本(本主题的解释)。该程序是在继承 - >下编写的。方法覆盖。这里A是B的超类,B是C的超类。在这个程序中,callme()是一个用三个类编写的方法,其中每个callme()都覆盖了另一个callme()方法。

  

1)在下面的程序中,获得类型A的引用是什么意思? (这个概念在A r行中实现;在Main方法中实现)
  2)什么是名称空间惯例?
  3)在这个程序中,“对一个对象的意思是什么意思”? (这个概念在r.callme()行中实现;用main方法编写。)

class A
{
void callme()
{
System.out.println("Im in the class A");
}
}

class B extends A
{
void callme()
{
System.out.println("Im in the class B");
}
}

class C extends B
{
void callme()
{
System.out.println("Im in the class C");
}
}

public class Dispatch 
{
public static void main(String args[])
{
A a = new A();
B b = new B();
C c = new C();
A r;

r = a;
r.callme();
r = b;
r.callme();
r = c;
r.callme();
}
}

2 个答案:

答案 0 :(得分:1)

这是一种克服方法超越问题的方法。 如果你想在开发过程中的某个时候摆脱过度使用的方法,那么你可以使用这种DMD方式。

将您的示例与评论相提并论:

class A //Super class A
{
    void callme()   // method callme() that'll be overwritten next in subclasses
    {
        System.out.println("Im in the class A"); 
    }
}  
class B extends A   //Subclass B  inherited from A
{            
    void callme()   //method callme() of Super class A is over-hided here
    {
        System.out.println("Im in the class B"); 
    } 
}  
class C extends B            //Subclass C, inherited from B
{
    void callme()    // this time B subclass method callme() is over-hided
    {
        System.out.println("Im in the class C"); 
    }
}  

//Now suppose, during you development phase at some time, you don't want to use over-ridden methods, here is DMD to help you out at run time.

public class Dispatch
{ 
    public static void main(String args[])
    { 
        A a = new A(); 
        B b = new B(); 
        C c = new C(); 
        A r;
        // r is a reference to class A
        // this reference should be assigned to each type of object and called at
        // run time without compiling.
        r = a; 
        r.callme(); 
        r = b; r.callme(); 
        r = c; r.callme(); 
    } 
}

答案 1 :(得分:0)

其实我不明白完整的问题。
我知道你有A r;的问题 此行的均值仅rA类型的参考变量...
并且程序在后面的行中使用它......