gpt4 book ai didi

java - 这个的编译时类型是什么? ( java 语)

转载 作者:搜寻专家 更新时间:2023-10-31 19:55:24 28 4
gpt4 key购买 nike

我怀疑它是编写它的类的类型,但我不是 100% 确定,有人可以证实我的怀疑并可能提供对定义此行为的 Java 语言规范的引用吗?

假设类 A 有一个方法 a(),它在其主体中使用了 this 关键字,而类 B 扩展类 A。现在类B继承了方法a(),但是,我不确定B.a( ) 现在是 A 还是 B

我问这个是因为我想了解访问者模式是如何工作的,正如 Robert C. Martin 的 Visitor chapter 中所描述的那样。来自敏捷软件开发的原则、模式和实践

如果想完全理解访问者模式,了解this 的编译时类型似乎是至关重要的,因为重载方法调用在编译时解决。更具体地说,我在访问者模式的 accept 方法中引用了 this 的编译时类型。

最佳答案

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);
}

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

关于java - 这个的编译时类型是什么? ( java 语),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21729279/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com