`
yeshaoting
  • 浏览: 684260 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

JAVA多态与类型转化分析(域没有多态性)(转)

    博客分类:
  • J2SE
阅读更多

多态与类型转化原理分析:

一、多态性:超类(即基类或父类)引用在运行时既能代表超类本身的对象,也能代表其子类(即派生类)的对象的能力。
类的一个成员若想表现多态必须可以被覆盖:
对于成员变量而言,不会发生覆盖现象(会隐藏),在子类出现相同变量的定义时只会隐藏父类变量,因此不会表现多态。同时变量调用在编译时就会解析,不符合动态绑定的特征;
在成员方法中,静态方法和final方法(或private方法,理由:很多人说因为private方法默认是final的,但或者有疑问:请参http://blog.csdn.net/ZangXT/archive/2009/09/03/4514031.aspx)也不会发生覆盖现象(会隐藏),因此也不会表现多态性。
因此只有除静态方法和final方法以外的方法才会表现多态性。


二、向上类型转化时:
丢失添加的方法和字段,剩余的为:
基类字段
基类静态方法或final方法 //前二者为不能被覆盖的成员,因此保留,无多态性
基类其他方法(若被子类覆盖则为子类覆盖的新方法)

package test3;

class oopsuper {

static String str = "父类字段";

public void publicMethod(){System.out.println("父类public方法");}
protected void protectedMethod(){System.out.println("父类protected方法");}//(1)
private void privateMethod(){System.out.println("父类private方法");}
static void staticMethod(){System.out.println("父类静态方法"); }
}

public class oopsub extends oopsuper {

String str = "子类字段";

public void publicMethod(){System.out.println("子类public方法");}
protected void protectedMethod(){System.out.println("子类protected方法");}//(2)
private void privateMethod(){System.out.println("子类private方法");}
static void staticMethod(){System.out.println("子类静态方法"); }

public static void main(String[] args) {

oopsuper upcast = new oopsub();

System.out.println(upcast.str);//方法调用才具有多态性,而域没有多态性

// 能被覆盖的方法的行为才有多态特性
upcast.publicMethod();
upcast.protectedMethod();

// 不能被覆盖的方法[final方法(含私有方法)、静态方法]的行为不具有多态特性
// upcast.privateMethod();访问的是父类的私有方法,不能访问,不具有多态现象
upcast.staticMethod();
}
}

  

ps:关于JVM的内存机制介绍,请参见http://wenku.baidu.com/view/69d80ca1b0717fd5360cdc23.html

关于父类subobject:这东西很让人头疼,请参见《深度探索C++对象模型》

英文好的请参见http://www.csci.csusb.edu/dick/c++std/cd2/derived.html

 

本文来自: http://hi.baidu.com/zhonghuage/blog/item/87b5c4eadd9c87ded539c905.html

分享到:
评论

相关推荐

    详解Java多态对象的类型转换与动态绑定

    Java中的多态性是面向对象编程的一个核心特性,它允许我们使用一个通用的父类引用来操作不同子类的对象,从而实现代码的灵活性和可扩展性。在Java中,多态性体现在两个方面:静态绑定(编译时绑定)和动态绑定(运行...

    java面试真题整理

    4.Java多态的体现方式方法的重载,重写,对象的多态性 1.编译时的多态:方法重载(个数、类型、顺序) 2.运行时多态:重写,对象的多态性(父类的引用指向子类的实例) 5.CSDN 1.泛型的好处 保护类型安全 避免...

    java类型转换大全

    9. **多态与类型转换**:在继承体系中,子类对象可以被视为父类对象,这就是多态性。向上转型(子类到父类)是自动的,而向下转型(父类到子类)需要强制转换。 10. **枚举类型的转换**:枚举类型是单例的,每个...

    JAVA数据类型转换.rar

    而方法重写时,子类方法覆盖父类方法,允许将子类对象作为父类对象处理,体现多态性。 10. **泛型与类型擦除** Java泛型在编译期间进行类型检查,但运行时会进行类型擦除,这意味着在运行时,所有的泛型类型都转换...

    Java综合性实验----------

    你还会接触到抽象类和接口,了解它们在多态性中的作用。异常处理是Java程序健壮性的重要组成部分,你将学习如何使用try-catch-finally语句来捕获和处理运行时错误。在Java集合框架方面,你会接触ArrayList、...

    java基础.doc

    - **多态性**:多态性允许不同子类对象对同一消息作出不同响应,分为编译时的多态(方法重载)和运行时的多态(方法重写)。 2. 访问修饰符 - **public**:任何地方都能访问。 - **private**:只有在同一类中能...

    2018最新BAT java经典必考面试题.docx

    Java中,多态性主要通过方法重载(编译时多态)和方法重写(运行时多态)实现。方法重载是同一类中方法名相同但参数列表不同的方法,而方法重写是子类对父类方法的重新定义。 2. 访问修饰符: - public:任何地方...

    java核心技术(卷1)源码 第10版

    在《Java核心技术(卷1)》中,源码涵盖了诸如类和对象、封装、继承、多态性、接口、异常处理、泛型、集合框架、输入/输出、线程等核心概念。 1. 类和对象:Java是一种面向对象的语言,一切皆为对象。类是创建对象...

    Java讲义与实例

    2. **类与对象**:Java是面向对象的语言,其核心概念包括类的定义、对象的创建、封装、继承和多态性。类是对象的模板,包含属性(成员变量)和方法(函数)。对象则是类的实例,通过new关键字创建。 3. **封装**:...

    Java常见⾯试题及答案

    Java是一种广泛使用的面向对象的编程语言,其特点包括抽象、继承、封装和多态性。以下是对这些概念的详细解释: 1. 抽象:抽象是面向对象编程的基础,它涉及将现实世界的问题转化为计算机语言的过程。这包括数据...

    java课后题答案1-9章

    9. **继承与多态**:深入理解类的继承关系,接口的使用,以及多态性的实现和意义。 每个章节的课后题通常会设计成各种类型,如选择题、填空题、简答题和编程题,旨在巩固和拓展学生的理论知识和实际编程能力。通过...

    java se部分学习案例源码 Java学习资料

    学习如何定义类,创建对象,以及理解类和对象之间的关系,如继承和多态性,这些都是Java SE学习的重要部分。 **3. 异常处理** 在Java中,异常处理是程序健壮性的重要组成部分。学会使用try-catch-finally语句块,...

    Java入门书籍实例源码(完整版)

    多态性是Java的另一大特点,它允许不同类型的对象对同一消息作出响应。这在处理一组具有相似行为的对象时非常有用。源码中可能包含接口和抽象类的示例,这些都是实现多态性的关键工具。 同时,由于标签中提到了"C++...

    能够自动批改java、c程序作业的java程序.zip

    Java是一种强类型、面向对象的语言,其主要特点包括垃圾回收机制、类的继承、接口和多态性。学习Java时,首先要理解基本的数据类型(如int、double、char等)、变量、运算符以及控制流程(如if语句、for循环、while...

    Java-Java面向对象编程教程

    学习Java面向对象编程,需要掌握如何创建和操作类,理解类与对象的关系,以及如何利用继承和多态性设计高效、可维护的代码。此外,实践是提高编程技能的关键,通过编写实际的Java程序,你可以更好地理解和运用这些...

    基于Java的实例源码-转C++代码工具 J2C.zip

    转换过程中,J2C需要处理Java的一些特性,如垃圾回收、异常处理、多态性等,这些在C++中都有不同的实现方式。同时,Java的面向对象特性,如类、接口、继承、封装和多态,也需要映射到C++的类结构、继承机制、虚函数...

    java课件完整版

    同时,深入理解继承、多态性和组合的概念,有助于设计出更加灵活和可维护的代码。 3. **异常处理**:Java中的异常处理机制允许程序员处理运行时错误,提高程序的健壮性。了解如何使用try-catch-finally语句块,以及...

    Java 学成在线笔记

    2. **面向对象编程**:封装、继承、多态是Java的核心特性,笔记可能详细解释了类、对象、接口、抽象类的概念,以及如何实现多态性。 3. **异常处理**:Java中的异常处理机制,如try-catch-finally语句块,以及不同...

    java程序设计教程教材例程

    - **继承与多态**:子类继承父类的特性,以及多态性的实现,如抽象类和接口。 3. **异常处理**: - **try-catch-finally语句**:如何捕获和处理运行时异常,确保程序健壮性。 - **自定义异常**:学习创建自己的...

    俄罗斯方块的Java实现

    《Java实现俄罗斯方块:面向对象编程的智慧结晶》 在计算机科学的世界里,...这个项目涉及了类的设计、接口的使用、多态性以及事件处理等多个核心概念,对于任何想深入学习Java的人来说,都是一个极具价值的实践项目。

Global site tag (gtag.js) - Google Analytics