0 0

新人,关于java多态的问题,具体见内文5

class Fruit {
public int m = 1000;
public void test() {
System.out.println("父类的test方法被调用!");
}
}
class Apple extends Fruit {
public int m = 10;
public void test() {
System.out.println("子类的test方法被调用!");
}
}
public class Test {
public static void main(String[] args) {
Fruit f1 = new Apple();
f1.test(); // 打印 子类的test方法被调用!
System.out.println(f1.m); //打印 1000
System.out.println(((Apple) f1).m); 打印  //10
}
}

为什么 main方法中2次打印的f1.m的值不相同?
2014年9月16日 15:16

5个答案 按时间排序 按投票排序

0 0

Fruit f1 = new Apple(); 创建了一个Apple对象,但是被Fruit所引用,所以第一次就是打印Fruit的成员变量。
第二次强制转换为Apple,所以打印Apple的成员变量

2014年9月18日 17:31
0 0

调用同名方法看实际的引用类型(就是运行时的类型),
调用同名字段看引用的类型(编译时的类型),
第二个打印语句的引用类型已经变成子类的对象。

2014年9月17日 09:58
0 0

http://bbs.csdn.net/topics/390158118
你可以看看这个帖子,和你问的一样。

2014年9月16日 22:03
0 0

因为这句代码:Fruit f1 = new Apple();

重载只是针对方法的,所以f1的成员变量是1000

虽说子类是可以拿到父类的m的,而子类的m就相当于全局变量和局部变量的区别(虽然说法有点问题,但差不多是这个意思),当全局变量和局部变量命名相同时,取局部变量

2014年9月16日 21:49
0 0

因为方法可以被重写,而成员变量不能。所以f1.test();怎么都是子类的。
打印 1000 是因为 f1 是 Fruit 类型所以 f1.m 是 Fruit 类的,
而打印10是因为((Apple) f1)是Apple类型(因为强转),所以打印Apple类的。
(我也是新手,不知道理解的对否)

2014年9月16日 16:23

相关推荐

    JAVA新人练习项目.pdf

    但从文件的标题“JAVA新人练习项目.pdf”和描述“JAVA新人练习项目.pdf”以及标签“技术”,我们可以合理推测这是为JAVA初学者准备的练习项目文档。 结合这些信息,我们可以讨论一些针对JAVA新手可能涉及的基础知识...

    Core Java( Java 核心) PDF 教材

    2. **面向对象编程**:Java是一门面向对象的语言,因此书中会详细讲解类、对象、封装、继承、多态等核心概念。这部分内容是理解Java程序设计的关键,也是后续进阶学习的基础。 3. **异常处理**:Java中的异常处理...

    Java面试宝典新人版

    23. **Java多态机制**: 多态是通过方法重载(Overload)和方法重写(Override)实现的,以及接口和抽象类的使用。 24. **abstractclass与interface的区别**: 抽象类可以包含字段、构造器、方法(包括抽象方法和...

    JAVA学习资料,适合新人

    Java集合框架是处理数据集合的重要工具,包括List(如ArrayList和LinkedList)、Set(如HashSet和TreeSet)和Map(如HashMap和TreeMap)接口,以及实现这些接口的具体类。学习如何有效地使用它们能大大提高代码的...

    java实例技术手册第二版,非常好的JAVA开发实例,是高级开发者必备的

    总的来说,《Java实例技术手册第二版》是一本全面且实用的Java学习资源,无论你是初入Java领域的新人,还是经验丰富的老兵,都能从中获益匪浅。通过阅读和实践书中的实例,你可以不断提升自己的编程技巧,解决实际...

    优秀的java代码 初学者

    2. **面向对象编程**:Java是一种面向对象的语言,理解封装、继承和多态是进阶学习的关键。封装允许我们隐藏实现细节,继承则实现了代码重用,多态则提供了灵活的接口,使得代码更具可扩展性。 3. **异常处理**:...

    java技术合集

    这个“java技术合集.chm”文件很可能包含这些领域的详细教程、示例代码、最佳实践和常见问题解答,可以帮助学习者深入理解Java语言及其生态系统。无论是初识Java的新人还是希望巩固技能的开发者,都可以从中受益匪浅...

    Java基础教程-1

    2. **面向对象**:Java是一种完全的面向对象语言,支持封装、继承和多态等面向对象的概念。 3. **健壮性**:Java通过严格的错误检查机制来提高程序的健壮性。 4. **安全性**:Java提供了强大的安全特性,可以防止...

    新版Java面试专题视频教程

    本教程全面覆盖了Java八股文面试的全套真题,并对每个问题进行了深度的详解,包括了大厂面试中经常出现的高频题目。 首先,我们要理解“Java八股文”这个概念,它是指Java面试中常常会遇到的经典问题,比如基础语法...

    Java基础教程(html)

    本教程将带你深入了解Java的基础知识,这对于任何想要踏入编程领域的新人来说都是至关重要的。 1. **Java简介**:Java的核心理念是“一次编写,到处运行”(Write Once, Run Anywhere),这意味着Java编写的代码...

    java笔试题大全 带相关答案版本 各大论坛搜集

    为了在求职过程中脱颖而出,特别是对于初入IT行业的新人来说,掌握Java相关的笔试题及其答案至关重要。本资源包收集了各种Java笔试题,涵盖了从基础到进阶的各种知识点,旨在帮助求职者做好充分的准备。 首先,...

    Java开发实战经典--李兴华--完整书签

    总的来说,《Java开发实战经典》是一本全面覆盖Java基础知识和实践技能的教材,无论是对于想要踏入Java开发领域的新人,还是希望巩固基础的开发者,都能从中获益匪浅。配合书中的完整书签,读者可以更方便地查阅和...

    Java编程起步--推荐初学者使用

    Java编程起步是初学者踏入编程世界的一把钥匙,它的特点是讲解详细且内容通俗易懂,非常适合没有编程背景的新人学习。下面将详细阐述Java编程的基础知识,帮助你深入理解这门强大的编程语言。 1. **Java简介**:...

    java编程百例-java入门

    Java编程是计算机科学领域中最广泛使用的编程...通过不断练习,初学者将能够编写出自己的Java程序,解决实际问题,进一步迈向Java开发的大门。这个资源对于那些希望快速融入Java世界的新人来说,无疑是一份宝贵的指南。

    由浅入深——Java 2自学教程.rar

    2. **面向对象编程**:作为面向对象的语言,Java的类、对象、封装、继承、多态等概念是重点讲解的内容。书中会解释如何创建和使用类,理解对象的生命周期,以及如何通过接口实现多态性。 3. **异常处理**:Java中的...

    Java 快速入门学习(多图教程)

    本教程“Java快速入门学习(多图教程)”是为初学者设计的,旨在帮助那些对编程感兴趣,特别是对Java语言感兴趣的新人,快速掌握基础概念和编程技巧。 1. **Java简介**:Java是由Sun Microsystems(后被Oracle收购...

    java 源码 和ppt教程

    "主要是关于j2se"表明这个资源专注于Java标准版(Java SE,即Java 2 Platform, Standard Edition)。Java SE是Java平台的核心,它提供了开发和运行桌面应用程序、Web应用程序和分布式系统所需的API和工具。J2SE的...

    黑马java面试宝典

    它不仅涵盖了Java语言的基础知识,还包含了面试中常见的问题和实战经验,对于那些期望在Java开发岗位上找到工作的新人来说,是一份极有价值的参考资料。 【标签】:“面试”意味着本书主要关注的是如何在面试中展现...

    非常简单的JAVA编辑商场收银系统

    这个描述明确指出,这是一个初级级别的项目,适合那些刚刚接触Java编程的新人。收银系统的实现通常涉及到基本的数据结构、控制流和面向对象的概念,这些是Java学习的基础。此外,描述中提到的“有待完善”意味着该...

Global site tag (gtag.js) - Google Analytics