我需要有关此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();
}
}
答案 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;
的问题
此行的均值仅r
是A
类型的参考变量...
并且程序在后面的行中使用它......