`
wanglei8
  • 浏览: 69402 次
  • 性别: Icon_minigender_1
  • 来自: 天津
社区版块
存档分类
最新评论

scjp中的一道重载问题

    博客分类:
  • j2se
 
阅读更多
首先大家看一下这道题的代码
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文章版权属于作者,受法律保护。没有作者书面许可不得转载。
3
2
分享到:
评论
6 楼 wanglei8 2009-07-17  
cooldh 写道
大威廉姆斯 

欢迎常来
5 楼 cooldh 2009-06-23  
大威廉姆斯 
4 楼 zhq426 2008-10-19  
明白了,呵呵
3 楼 zhq426 2008-10-19  
new Group()生成了一个Group对象,由于Group类是Scott类的导出类,所以可以自动向上转型为Scott类型

为什么会要自动向上转型啊。。。
2 楼 wanglei8 2008-10-17  
melode11 写道

这个还有一个关键点: 重载方法的选择是在编译器确定的.而重写方法的选择是在运行期

感谢melode11的补充
重写(Override)实现了多态(Polymorphism),多态也就是在运行期绑定,或后期绑定
1 楼 melode11 2008-10-16  
这个还有一个关键点: 重载方法的选择是在编译器确定的.而重写方法的选择是在运行期

相关推荐

    Java SCJP中文学习指南

    String类在Java中是不可变的,它的常用方法如concat()、substring()、indexOf()等是SCJP考试的常见考点。同时,了解StringBuilder和StringBuffer线程安全的字符串操作也是必要的。 六、IO流与NIO 输入/输出流(IO流...

    SCJP

    SCJP

    SCJP中文大纲,SCJP中文考试指导

    SCJP(Sun Certified Java Programmer)中文大纲...以上就是SCJP中文大纲的主要内容,考生需要全面掌握这些知识,以便在考试中表现出色。学习这些内容不仅有助于通过考试,也能为实际的Java开发工作打下坚实的基础。

    SCJP 中文大纲简介~

    ### SCJP 中文大纲知识点详解 #### 第一部分:声明和访问控制 - **数组声明与初始化**:了解如何声明及初始化任何类型的数组,这包括基本数据类型数组以及对象类型的数组。 - **类、内部类、方法等的声明**:熟悉...

    SCJP试题详析(中文)

    4. **多态**:重写(override)和重载(overload)的概念,以及多态在方法调用中的应用。 5. **接口**:作为完全抽象的类,接口用于定义行为规范。 6. **异常处理**:理解try-catch-finally语句块和throw、throws...

    SCJP大全

    《SCJP大全》是一款全面覆盖SCJP(Sun Certified Programmer for Java Platform, Standard Edition)考试的知识资源,旨在帮助学习者一次性通过这项重要的Java编程认证。SCJP是Java开发人员的基础认证,证明了持有者...

    SCJP试题,SCJP试题

    以下是一些SCJP试题中涉及的重要知识点: 1. 数据类型: - `short`类型在Java中是一个有符号的16位整数类型,其取值范围是`-2^15`到`(2^15)-1`,即`-32768`到`32767`。选项C正确。 2. 标识符规则: - Java的...

    SCJP典型试题1000例

    SCJP典型试题1000例 SCJP典型试题1000例 SCJP典型试题1000例

    SCJP考试模拟机题库

    SCJP考试中的一个重要部分是Java语言的基础知识,包括但不限于: 1. 数据类型:理解基本数据类型(整型、浮点型、字符型、布尔型)以及它们的范围和用法。 2. 变量与运算符:掌握变量声明、初始化、运算符的使用,如...

    scjp中文考试资料

    SCJP(Sun Certified Programmer for the Java 2 Platform, Standard Edition)是Oracle公司为Java程序员提供的一项认证考试,旨在验证考生对Java编程语言的基础知识和理解。这个“scjp中文考试资料”压缩包很可能是...

    SCJP 认证考试指南中文官方版

    为了备考SCJP,建议考生不仅要阅读并理解书中内容,还要动手编写代码进行实践,同时可以通过参加在线讨论论坛、解答模拟试题等方式进一步巩固知识。只有理论与实践相结合,才能在考试中取得理想的成绩,顺利获得SCJP...

    SCJP试题详析(中文版)

    SCJP,即Sun Certified Java Programmer,是Java领域中的一项认证,由Sun Microsystems(后被Oracle收购)推出,旨在评估个人在Java编程语言方面的专业知识和技能。尽管现在该认证已不再提供,但在其盛行期间,它被...

    SCJP习题

    这些资源可能帮助考生理解和解决SCJP考试中的实际编程问题。 标签“源码”暗示了文件可能包含一些示例代码或解答题目的参考实现,这对于理解Java编程概念和解决实际问题至关重要。源代码示例可以帮助学习者看到如何...

    JAVA 认证 SCJP官方中文指南

    《JAVA 认证 SCJP官方中文指南》是针对Java初学者和希望深入理解Java语言的专业人士的一份宝贵资源。SCJP(Sun Certified Programmer for the Java 2 Platform, Standard Edition)是Oracle公司之前推出的Java程序员...

    scjp模拟器scjp模拟器

    SCJP认证是Java开发者职业生涯中的一个重要里程碑,它证明了持有者具备编写和维护高质量Java代码的基础技能。 在准备SCJP考试时,掌握以下核心知识点至关重要: 1. **Java语法**:包括基本数据类型、变量、常量、...

    Java国际认证(SCJP)典型试题1000例(中文高清影印版).zip

    通过这1000道典型试题的练习,考生不仅能加深对Java语言的理解,还能提升解决实际问题的能力,为通过SCJP认证考试做好充分准备。同时,这本书对于想要提升Java编程技能的开发者来说,也是一份宝贵的参考资料。

    SCJP认证考试指南

    SCJP – Sun Certified Java Programmer (Sun Java 程序员认证).Sun 公司作为Java 语言的发明者,对全球的Java 开发人员进行技术水平认证。该认证在国际上获得了IT 公司的普遍认可,是目前国际上最热门的IT 认证之一...

    scjp官方培训教材中文版

    SCJP(Sun Certified Programmer for the Java 2 Platform, Standard Edition)是Oracle公司为Java程序员提供的一项认证考试,旨在验证考生对Java编程语言的基础知识和理解。这个“scjp官方培训教材中文版”提供了...

    SCJP 经典练习题

    1. **Java基础知识**:SCJP练习题中会涉及到Java的基本语法,如变量声明、数据类型、运算符、流程控制语句(if-else、switch、for、while等)。此外,还包括面向对象的基础概念,如封装、继承、多态。 2. **类与...

Global site tag (gtag.js) - Google Analytics