`
isiqi
  • 浏览: 16552079 次
  • 性别: Icon_minigender_1
  • 来自: 济南
社区版块
存档分类
最新评论

JAVA中的向下转型(downcasting)及泛型与向上转型(upcasting)及RTTI、反射机制

阅读更多

JAVA中的向下转型(downcasting)及泛型与向上转型(upcasting)及RTTI、反射机制

向上转型(upcasting):对象可以作为它本身的类型使用也可以作为它父类(基类)对象使用,java中是单继承的,所以是一种安全的做法。

当你初始化子类时,产生一个对象时,该对象将父类的对象作为子对象包含其中。向上转型会丢失子类的方法。但可以将所有对象至于一个共同的容器中存储与调用,实现了容器的复用,(collection 容器集默认将所有对象作为Object存储的),但在具体使用是要确定对象原来的身份。

Java在运行中动态识别对象和类信息有两种机制:

1RTTIrun-time type identification)运行期类别识别(强制类型转换“()”,类型转换是在运行期进行的),它假定我们在编译和运行期已经知道了所有的类型。

Java是通过Class对象实现RTTI机制的

Java中为每个类创建一个Class对象(*.class),它包括了与类相关的信息,用来创建类的常规对象,在运行期,一旦我们想生成某个类的对象,运行这个程序的JVM首先检查这个类的Class对象是否加载,如果尚未加载,JVM会根据类名查找.class文件,并将其载入,之后你就可以创建这个类的任何对象了。java程序不是一开始执行,所有类就被完全加载的。Class对象仅在需要时被加载,Static语句块是在类被加载时执行。

生成Class对象的两种引用方式:

  • Class.forName(“Gun”

  • 类字面常量: Gun.class

RTTI的限制:类在编译期间必须已知,在编译期间打开和检查.class文件。

2、反射机制(reflection)它允许我们在运行期获得类的信息。

反射机制在运行期打开和检查.class文件。

向下转型(downcasting):父类对象向下转变为具体的子类对象,但是种不安全的操作,很难确定应该转变为怎样的子类。

为了实现复用容器,java中定义了一个通用类型:object,作为所有类的父类,以及java单根继承的特性,意味着object可以存储任何类的实例。在使用object作为容器时,你需要在其中置入对象引用(object reference),之后可以将它们取回使用,但同时原数据对象会被向上转型为Object,它会丢失自己的身份。怎样才能变回原来的对象?

其解决方法是参数化类型(parameterized type),也就是说所操作的数据类型被指定为一个参数。这种参数类型可以用在类、接口和方法的创建中,分别称为泛型类、泛型接口、泛型方法。这是JDK 5.0引入的新特性,简称为泛型。

没有泛型的情况的下,通过对类型Object的引用来实现参数的“任意化”,“任意化”带来的缺点是要做显式的强制类型转换,而这种转换是要求开发者对实际参数类型可以预知的情况下进行的。对于强制类型转换错误的情况,编译器可能不提示错误,在运行的时候才出现异常,这是一个安全隐患。

泛型的好处是在编译的时候检查类型安全,并且所有的强制转换都是自动和隐式的,提高代码的重用率。

泛型规则和限制

  1、泛型的类型参数只能是类类型(包括自定义类),不能是简单类型。

  2、同一种泛型可以对应多个版本(因为参数类型是不确定的),不同版本的泛型类实例是不兼容的。

  3、泛型的类型参数可以有多个。

  4、泛型的参数类型可以使用extends语句,例如<T extends superclass>。习惯上成为“有界类型”。

  5、泛型的参数类型还可以是通配符类型。例如Class<?> classType = Class.forName(java.lang.String)

分享到:
评论

相关推荐

    java向上转型向下转型

    Java 向上转型与向下转型 Java 转型是 Java 编程中的一种非常重要的概念,主要包括向上转型和向下转型两种。向上转型是指将子类对象转换为父类对象,而向下转型是指将父类对象转换为子类对象。 向上转型...

    向下转型Downcasting 1---马克-to-win java视频

    向下转型 Downcasting 马克-to-win java视频的详细描述

    学习Java之如何正确地向上转型与向下转型.rar

    理解并熟练运用Java中的向上转型和向下转型是掌握面向对象编程的关键。向上转型简化了代码,提高了代码的通用性,而向下转型则提供了访问子类特定功能的能力。在实际开发中,需谨慎使用向下转型,并确保在转型前进行...

    Java 向上转型和向下转型的详解

    Java 向上转型和向下转型是面向对象编程语言中的一个重要概念,它们都是继承机制的基础上进行转型的。向上转型是将子类对象转换为父类类型的过程,而向下转型是将父类对象转换为子类类型的过程。 向上转型...

    Java 转型(向上或向下转型)详解及简单实例

    本文将深入探讨Java中的向上转型和向下转型,同时提供简单的实例来帮助理解这些概念。 首先,让我们了解一下向上转型。向上转型(Upcasting)是指将子类对象赋值给父类引用。在Java中,这是自动完成的,因为子类...

    289.287.JAVA基础教程_面向对象(中)-向下转型的几个常见问题(289).rar

    在学习Java的过程中,向下转型是面向对象编程中的一个重要环节,尤其在处理类的继承关系时经常用到。本教程将深入探讨Java基础中的面向对象部分,特别是关于向下转型的几个常见问题。 1. **什么是向下转型?** 向...

    个人写的关于Java笔记,较为全面

    Java 向下转型(Java Downcasting)是一种机制,用于将父类对象转换为子类对象。 接口 Java 接口(Java Interface)是一种抽象类,不能被实例化。接口可以包含多个抽象方法和非抽象方法。 Java 接口可以用于定义...

    java中对象转型多态抽象类接口笔记.doc

    ### Java中的对象转型与多态 #### 一、对象转型 在Java中,对象转型(Casting)是指将一个对象的引用从一个类转换到另一个类的过程。这通常发生在类的继承关系中。 ##### 向上转型(Upcasting) - **定义**:将...

    Java 多态中的类型转换

    本篇将深入探讨Java多态中的类型转换,包括向上转型(Upcasting)和向下转型(Downcasting),以及相关的注意事项。 1. **向上转型(Upcasting)** 向上转型是指将子类的对象引用赋值给父类的引用。在Java中,这是...

    java对象转型实例分析

    在上述实例中,我们探讨了两种主要的转型方式:向上转型(upcasting)和向下转型(downcasting)。 1. 向上转型(Upcasting): 向上转型是自动进行的,无需显式声明。当我们将子类对象赋值给基类引用时,就发生了...

    JAVA中类的多态的理解.pdf

    3. 向上转型(Upcasting)与向下转型(Downcasting): 向上转型是自动发生的,将子类引用转型为父类类型。文件中的`Person p = new Student();`即是向上转型的一个例子。向上转型可以提升程序的灵活性,但会丧失...

    《Java面试手册》.pdf

    - 转型:Java中的转型分为向上转型(upcasting)和向下转型(downcasting)。向上转型是自动进行的,而向下转型需要显式进行,并且需要确保对象的实际类型是目标类型的子类,否则会导致ClassCastException。 3. ...

    浅谈Java中向上造型向下造型和接口回调中的问题

    浅谈Java中向上造型向下造型和接口回调中的问题 Java 中的向上造型、向下造型和接口回调是 Java 编程中非常重要的概念。下面我们将对这三个概念进行详细的介绍。 向上造型(Upcasting) 向上造型是指将子类对象...

    一文理解cast向下转换内部代码

    这通常发生在两种情况:向上转型(Upcasting)和向下转型(Downcasting)。向上转型是自动的,无需显式Cast,它将子类对象视为其父类对象,这在多态性中非常常见。而向下转型则需要显式Cast,因为它涉及到将父类对象...

    day02-多态&抽象类&接口1

    - 向下转型(Downcasting):将父类引用转换为子类类型,需要显式声明。例如:子类型 对象名 = (子类型)父类引用;需要注意的是,只有当父类引用实际指向的是子类对象时,向下转型才是安全的,否则会抛出...

    java学习资料-Java继承和多态

    在Java中,向上转型(Upcasting)是自动进行的,即子类对象可以被当作父类类型引用。而向下转型(Downcasting)需要显式进行,需要注意的是,只有真正的子类对象才能安全地向下转型。 ### 封装 **1. 封装的原理** ...

    Java语言程序设计教程(Java 7)——入门与提高篇04

    - **向下转型(downcasting)**:则是将父类类型的变量转换为子类类型。在向下转型时需要小心,因为不是所有的父类类型对象都是相应子类的实例,如果尝试将一个不是特定子类的父类对象转换为子类类型,程序将抛出`...

    java 多态

    5. **向上转型(Upcasting)与向下转型(Downcasting)** - 向上转型是将子类对象赋值给父类引用,这是自动进行的,例如:`Parent p = new Child();` - 向下转型是将父类引用转换为子类对象,需要显式进行,例如:...

    java 子类对象赋值给父类对象的使用

    当我们创建一个子类对象并将其赋值给父类引用时,这种行为被称为向上转型(Upcasting)。这一过程是自动且安全的,因为子类对象包含了父类的所有属性和方法。下面我们将深入探讨这个主题,包括它的原理、示例代码...

    面向对象oop详解

    向下转型(downcasting)是向上转型的逆操作,它将父类引用强制转换为子类引用。只有当这个父类引用确实指向一个子类对象时,向下转型才会成功。强制类型转换后,子类引用可以访问子类中的所有成员,包括那些特有的...

Global site tag (gtag.js) - Google Analytics