这个的编译时间类型是什么?(在Java中)

jhe*_*dus 5 java design-patterns

我怀疑它是编写它的类的类型,但我不是100%肯定,有人可以确认我的怀疑,并可能提供Java语言规范的参考,其中定义了这种行为?

假设class A有一个在其体内a()使用this关键字的方法,类B扩展了class A.现在class B继承了方法a(),但是,我不确定thisin 的编译时类型B.a()是现在A还是B

我问这个,因为我想了解访问者模式是如何工作的,因为它是这个罗伯特C.马丁的描述游客章该原则,模式和敏捷软件开发的实践.

this如果想要完全理解访问者模式,那么知道编译时类型似乎是至关重要的,因为在编译时解析了重载方法调用.更具体而言,我指的编译时间类型thisaccept在访问者模式的方法.

das*_*ght 4

的类型this是使用它的类的类型。事实上,文章中的访客模式对于发挥作用至关重要。

访问者模式分两步实现双重调度 -accept在被访问的对象中选择适当的方法(第一阶段),然后visit在访问者中选择适当的方法(第二阶段)。第一条腿是通过重写实现的;第二条腿是通过重载来实现的。

请注意,第二条腿不必使用重载。事实上,为了更好的可读性,通常不在那里使用它。比较这两个实现:

// Copied from Listing 29-2
public interface ModemVisitorOverload
{
    void visit(HayesModem modem);
    void visit(ZoomModem modem);
    void visit(ErnieModem modem);
}

public interface ModemVisitorNoOverload
{
    void visitHayes(HayesModem modem);
    void visitZoom(ZoomModem modem);
    void visitErnie(ErnieModem modem);
}
Run Code Online (Sandbox Code Playgroud)

第二种实现不使用重载。它的工作方式完全相同,只是代码的人类读者会立即看到发生了什么。