scjp中的一道重载问题

首先大家看一下这道题的代码

class Scott {
void prints(Scott s) {
System.out.println("Scott");
}

}

public class Group extends Scott {
void prints(Group g) {
System.out.println("Group");
}

public static void main(String[] args) {
Scott s = new Group();
s.prints(new Group());
}
}

提问:what is output?
分析这道题目,很容易让人误以为是多态行为,输出Group
但是仔细分析,Group是Scott的导出类,Group重载(Overload)了prints方法,而不是重写(Override),因为重写要求方法名称,与参数类型、个数、顺序都必须相同的情况下才能发生。现在Scott只有一个接口prints(Scott s),而Group有两个接口prints(Scott s),prints(Group g)。
好了,现在看main函数里面的代码,新建了一个Group对象,Scott引用(reference)s指向了Group对象,发生了向上转型(upcast)。引用s调用prints方法,这时候大家请注意了,由于Scott类型只有一个接口prints(Scott s),所以只能调用这个方法,new Group()生成了一个Group对象,由于Group类是Scott类的导出类,所以可以自动向上转型为Scott类型,最后输出了Scott
输出结果为:
Scott

------------2008-10-16 20:35补充---------------
刚刚突然想到了,为了进一步理解向上转型,这道题还可以增加一句有意思的代码

class Scott {
void prints(Scott s) {
System.out.println("Scott");
}

}

public class Group extends Scott {
void prints(Group g) {
System.out.println("Group");
}

public static void main(String[] args) {
Scott s = new Group();
s.prints(new Group());
((Group) s).prints(new Group()); //新增
}
}

大家注意到新增加了一句
((Group) s).prints(new Group());
这里使用到了向下转型(downcast),由于Scott类只有一个接口prints(Scott s),而Group有两个接口prints(Scott s)和prints(Group g),这里实际上想调用的接口为Group类的扩展接口prints(Group g),所以通过向下转型就可以调用到Group类的扩展接口prints(Group g),因此新增加的这句代码输出:Group
程序的全部输出结果为:
Scott
Group

声明:JavaEye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
“华为杯”第十八届中国研究生数学建模竞赛是一项全国性赛事,致力于提升研究生的数学建模与创新实践能力。数学建模是将实际问题转化为数学模型,并运用数学方法求解以解决实际问题的科学方法。该竞赛为参赛者提供了展示学术水平和团队协作精神的平台。 论文模板通常包含以下内容:封面需涵盖比赛名称、学校参赛队号、队员姓名以及“华为杯”和中国研究生创新实践系列大赛的标志;摘要部分应简洁明了地概括研究工作,包括研究问题、方法、主要结果和结论,使读者无需阅读全文即可了解核心内容;目录则列出各章节标题,便于读者快速查找;问题重述部分需详细重新阐述比赛中的实际问题,涵盖背景、原因及重要性;问题分析部分要深入探讨每个问题的内在联系与解决思路,分析各个子问题的特点、难点及可能的解决方案;模型假设与符号说明部分需列出合理假设以简化问题,并清晰定义模型中的变量和符号;模型建立与求解部分是核心,详细阐述将实际问题转化为数学模型的过程,以及采用的数学工具和求解步骤;结果验证与讨论部分展示模型求解结果,评估模型的有效性和局限性,并对结果进行解释;结论部分总结研究工作,强调模型的意义和对未来研究的建议;参考文献部分列出引用文献,遵循规范格式。 在准备竞赛论文时,参赛者需注重逻辑清晰、论述严谨,确保模型科学实用。良好的团队协作和时间管理也是成功的关键。通过竞赛,研究生们不仅锻炼了数学应用能力,还提升了团队合作、问题解决和科研写作能力。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值