Override and Overload in Java

面试可以让人重新点燃学习的热情,尽管目的性比较强,但是客观上的确学习到了东西。在一次面试中发现自己又搞混了override和overload。

 

在Visitor设计模式中也是要特别注意overload和override的。很多人可能会写出如下的Visitor代码

输出结果是“Node Node Node”,显然这不是你想要的。为什么会这样呢?这在于visitor.visit(this)这行代码,所谓的动态调用(override)指的是visitor会调用被override的方法,但是显然visitor提供了三个函数,分别对应Node, SimpleNode, ComplexNode三种参数。具体调用哪个呢?其实this指的是Node类型,所以调用的是Node对应的函数,结果输出都是“Node“。我们需要修改的就是按照Visitor模式中的方法,给每种Node都加上一个accept方法,使得this指向正确的类型。这也是Visitor模式被人诟病的一个地方。另一个讨厌的地方就是,增加一个Node子类,必须在Visitor中增加一个visit方法。据说Visitor模式刚进入中国的时候,没有几个人能懂。现在想来还是很容易理解的,因为要真正懂的现在也未必有很多人。不信你可以解释一下Visitor中的每个元素作用,尤其是看过书之后一年再来解释,如果还能够正确讲出来,说明你是理解了而不是背下来。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值