JiveJdon Community Forums
在线180人   首页   主题表   培训咨询   标签   查搜   注册    登陆 RSS
首页 » 论坛 » 语言平台技术讨论
???en_US.forumThreadPrev.name??? 上一主题
RSS google yahoo 365Key网摘 CSDN网摘 添加到百度搜藏 POCO网摘 新浪ViVi QQ网摘
???en_US.forumThreadNext.name??? 下一主题
Go 共有 2 回复(1页) 阅读65次
 发表新帖子   回复该主题贴
wwlhp@jdon.com



发表文章: 111
注册时间: 2003年06月03日
悄悄话
个人博客
在线? 当前离线
我要关注该作者发言
应用visitor模式中发现继承方法不能被重载,求教!!! 2006年05月07日 00:19 收藏关注本主题 到本帖网址 加入本帖到收藏夹 请用鼠标选择需要回复的文字再点按本回复键 回复该主题
标签
一个关于visitor模式的问题,大家帮忙看看是为什么。

被访问体系是IChargeEvent(计费事件),有很多子类,而且会继续扩展。
访问者体系是IChargeWay(计费方式),也有很多子类,也会继续扩展。而且每个具体的计费方式并不是支持所有的计费事件。

这种情况下用传统的访问者模式不是很好,因此我没有在IChargeWay中对每个计费事件都定义访问方法,而是定义了对IChargeEvent

的访问方法。在子类中实现对IChargeEvent的访问方法,并且对每个IChargeEvent子类定义一个重载方法。如下:

public interface IChargeWay
{
ChargeResult doCharge(IChargeEvent event);
}

public class SMChargeWay implements IChargeWay
{
public ChargeResult doCharge(IChargeEvent event)
{
// not supported IChargeEvent subclass will come to this overload method.
System.out.println(
"no supported charge event.");
}

public ChargeResult doCharge(DownToneEvent event)
{
// DownToneEvent charge
System.out.println(
"DownToneEvent charge process.");
}

... more overload method for IChargeEvent subclass
}


然后在IChargeEvent体系有一个方法接受IChargeWay对象。

public interface IChargeEvent
{
ChargeResult chargeBy(IChargeWay way);
}

public class DownToneEvent implements IChargeEvent
{
public ChargeResult chargeBy(IChargeWay way)
{
return way.doCharge(this);
}
}

public class CopyToneEvent implements IChargeEvent
{
public ChargeResult chargeBy(IChargeWay way)
{
return way.doCharge(this);
}
}


这里是测试程序:

public class Test
{
public static void main(String[] args)
{
IChargeEvent dtEvent = new DownToneEvent();
IChargeWay smWay = new SMChargeWay();

// I expect the following method printing "DownToneEvent charge process."
// But actually, it prints "no supported charge event."
dtEvent.chargeBy(smWay);
}
}


为什么没有走到对于该事件的重载方法内,难道继承来的方法就不能被重载了么?恳求大侠指点迷津!!!
wwlhp@jdon.com



发表文章: 111
注册时间: 2003年06月03日
悄悄话
个人博客
在线? 当前离线
我要关注该作者发言
Re: 应用visitor模式中发现继承方法不能被重载,求教!!! 2006年05月09日 23:28 收藏关注本主题 到本帖网址 加入本帖到收藏夹 请用鼠标选择需要回复的文字再点按本回复键 回复该主题
banq, help!
kuku5525



发表文章:
注册时间: 2004年05月15日
悄悄话
个人博客
在线? 当前离线
我要关注该作者发言
Re: 应用visitor模式中发现继承方法不能被重载,求教!!! 2006年05月10日 17:22 收藏关注本主题 到本帖网址 加入本帖到收藏夹 请用鼠标选择需要回复的文字再点按本回复键 回复该主题
请参考effective java的第26条
你的dtEvent 类型是IChargeEvent
当然去执行 public ChargeResult doCharge(IChargeEvent event)咯
标签
共有 2 回复(1页) Go
???en_US.forumThreadPrev.name??? 上一主题
  Go back to the topic 返回本主题   Go back to the topic listing返回主题列表    返回页首返回页首
???en_US.forumThreadNext.name??? 下一主题
正在读取,请等待...
查询本论坛内 回复超过的热门帖子
标题
 
粗体: [b]文本[/b] 斜体: [i]文本[/i] 下划线 [u]文本[/u] 插入网上的图片 [img]http://wwww.xxxx.com/img.ext[/img] 插入代码 [code]程序代码[/code]  插入url链接 [url]http://url[/url] / [url=http://url]URL加下滑线[/url] 上传图片 word文档 Txt等附件
内容
  提交时自动拷贝以上内容到剪贴板 Ctrl+V可取出;提问题前先查询标签列表

使用帮助 手机m.jdon.com RSS add to google add to yahoo
解惑之道在J道 ,打造中国最具影响力的的软件架构社区 推荐FireFox或Chrome快速浏览本站
OpenSource JIVEJDON Powered by JdonFramework Code © 2002-10 jdon.com

anti spam