首先大家看一下这道题的代码
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文章版权属于作者,受法律保护。没有作者书面许可不得转载。
分享到:
相关推荐
String类在Java中是不可变的,它的常用方法如concat()、substring()、indexOf()等是SCJP考试的常见考点。同时,了解StringBuilder和StringBuffer线程安全的字符串操作也是必要的。 六、IO流与NIO 输入/输出流(IO流...
SCJP
SCJP(Sun Certified Java Programmer)中文大纲...以上就是SCJP中文大纲的主要内容,考生需要全面掌握这些知识,以便在考试中表现出色。学习这些内容不仅有助于通过考试,也能为实际的Java开发工作打下坚实的基础。
### SCJP 中文大纲知识点详解 #### 第一部分:声明和访问控制 - **数组声明与初始化**:了解如何声明及初始化任何类型的数组,这包括基本数据类型数组以及对象类型的数组。 - **类、内部类、方法等的声明**:熟悉...
4. **多态**:重写(override)和重载(overload)的概念,以及多态在方法调用中的应用。 5. **接口**:作为完全抽象的类,接口用于定义行为规范。 6. **异常处理**:理解try-catch-finally语句块和throw、throws...
《SCJP大全》是一款全面覆盖SCJP(Sun Certified Programmer for Java Platform, Standard Edition)考试的知识资源,旨在帮助学习者一次性通过这项重要的Java编程认证。SCJP是Java开发人员的基础认证,证明了持有者...
以下是一些SCJP试题中涉及的重要知识点: 1. 数据类型: - `short`类型在Java中是一个有符号的16位整数类型,其取值范围是`-2^15`到`(2^15)-1`,即`-32768`到`32767`。选项C正确。 2. 标识符规则: - Java的...
SCJP典型试题1000例 SCJP典型试题1000例 SCJP典型试题1000例
SCJP考试中的一个重要部分是Java语言的基础知识,包括但不限于: 1. 数据类型:理解基本数据类型(整型、浮点型、字符型、布尔型)以及它们的范围和用法。 2. 变量与运算符:掌握变量声明、初始化、运算符的使用,如...
SCJP(Sun Certified Programmer for the Java 2 Platform, Standard Edition)是Oracle公司为Java程序员提供的一项认证考试,旨在验证考生对Java编程语言的基础知识和理解。这个“scjp中文考试资料”压缩包很可能是...
为了备考SCJP,建议考生不仅要阅读并理解书中内容,还要动手编写代码进行实践,同时可以通过参加在线讨论论坛、解答模拟试题等方式进一步巩固知识。只有理论与实践相结合,才能在考试中取得理想的成绩,顺利获得SCJP...
SCJP,即Sun Certified Java Programmer,是Java领域中的一项认证,由Sun Microsystems(后被Oracle收购)推出,旨在评估个人在Java编程语言方面的专业知识和技能。尽管现在该认证已不再提供,但在其盛行期间,它被...
这些资源可能帮助考生理解和解决SCJP考试中的实际编程问题。 标签“源码”暗示了文件可能包含一些示例代码或解答题目的参考实现,这对于理解Java编程概念和解决实际问题至关重要。源代码示例可以帮助学习者看到如何...
《JAVA 认证 SCJP官方中文指南》是针对Java初学者和希望深入理解Java语言的专业人士的一份宝贵资源。SCJP(Sun Certified Programmer for the Java 2 Platform, Standard Edition)是Oracle公司之前推出的Java程序员...
SCJP认证是Java开发者职业生涯中的一个重要里程碑,它证明了持有者具备编写和维护高质量Java代码的基础技能。 在准备SCJP考试时,掌握以下核心知识点至关重要: 1. **Java语法**:包括基本数据类型、变量、常量、...
通过这1000道典型试题的练习,考生不仅能加深对Java语言的理解,还能提升解决实际问题的能力,为通过SCJP认证考试做好充分准备。同时,这本书对于想要提升Java编程技能的开发者来说,也是一份宝贵的参考资料。
SCJP – Sun Certified Java Programmer (Sun Java 程序员认证).Sun 公司作为Java 语言的发明者,对全球的Java 开发人员进行技术水平认证。该认证在国际上获得了IT 公司的普遍认可,是目前国际上最热门的IT 认证之一...
SCJP(Sun Certified Programmer for the Java 2 Platform, Standard Edition)是Oracle公司为Java程序员提供的一项认证考试,旨在验证考生对Java编程语言的基础知识和理解。这个“scjp官方培训教材中文版”提供了...
1. **Java基础知识**:SCJP练习题中会涉及到Java的基本语法,如变量声明、数据类型、运算符、流程控制语句(if-else、switch、for、while等)。此外,还包括面向对象的基础概念,如封装、继承、多态。 2. **类与...