`
我想我是海
  • 浏览: 214487 次
社区版块
存档分类
最新评论

对象类型转换的总结

 
阅读更多
看下面一条例子!
 
import java.lang.*;
public class j02090504
{
  public static void main(String para[])
  {
    A obj1 ;  
    System.out.println("A 对象引用 A 实例");
    obj1 = new A();
    obj1.printX();
    //((B)obj1).test();   //执行时期例外,obj1 之实例不满足 B 类,但在编译时期不会发现
    System.out.println("obj1.Y = " + obj1.Y );  // A 定义的 Y
   
    System.out.println("==========================="); 
    System.out.println("(A)B==> A 对象引用 B 实例");  
    obj1 = (A)(new B());
      // 通常不需自己作此转型,因 obj1 = new B() 能自动转型  
    obj1.printX(); // 唤起的是 B 的 printX() 方法实现  
    //obj1.test();   //编译错误,A 类没有 test() 方法
    System.out.println("obj1.Y = " + obj1.Y );   
    System.out.println("将 A 类之对象引用转型为 B ...");
    ((B)obj1).printX();
      // 唤起的是 B 的 printX() 方法实现,前者与之同,不需这样做  
    ((B)obj1).test();   // 转为 B 类就有 test() 方法   
    System.out.println("((B)obj1).Y = " + ((B)obj1).Y );
   
    System.out.println("===========================");   
    //B testObj = (B)new A();  //执行时期例外,A 类之实例不满足 B 类
    System.out.println("(B)((A)B)==> B 对象引用 B 实例"); // B对象实例
    B obj2 = (B)obj1;  
      // obj1 目前引用 B 类之实例,其对象引用可转为 B 类
    obj2.printX();
    obj2.test(); 
    System.out.println("obj2.Y = " + obj2.Y );  // B 类定义的 Y
    System.out.println("将 B 类之对象引用转型为 A ...");
    ((A)obj2).printX();  //唤起的还是 B 的 printX() 方法实现
    //((A)obj2).test(); //编译错误,A 类没有 test() 方法
    System.out.println("((A)obj2).Y = " + ((A)obj2).Y );  // A 类定义的 Y
  }
}
class A
{
  int X = 199;
  int Y = 333;
  public void printX()
  {
   System.out.println("X+100 = " + (X+100) );
  }
}
class B extends A
{
  double X =255.51;
  double Y = 11.23;
  public void printX()
  {
   System.out.println("X = " + X );
  }
  public void test()
  {
    System.out.println("test() in B");  
  }

看完后搞出结果的心得是:
1、转型无妨,但是否可以调用该引用所指的对像中的变最要看最原始New的
那一个对像是哪一个类的。
 2、不可将父类的实例转型为子类?因为父类不满足子类。
而子类可转型为父类,因为子类有父类的结构。而此时父类的引用可以引用
子类的变量(因为Override!!!!)。
 
最后,总结了一下。问题是出现在一个实例在创建时的类型上啊!
我们可以看到整个主程序里,一共出现了两次创建新类的语句,见有色部分既New语句。
得出以下结论:
一、若New出来的对象是父类类型,不能将父类类型转为子类类型。
二、若New出来的对象是子类类型,可以将其转为父类类型。而且该引用存
取的变量是子类定义的,原因为Override了。但是引用父类没有而子类有的变量
时出错原因是父类没有这样的变量,别忘了我们把子类转成了父类了。这么一来,这种情况就很清楚啦。
(即按照用父类一样地用子类。而子类超出父类的东西不能用。呵呵,这就是父类引用引用子类实例的实质,不过就一句话!)
而这样的父类类型可以再转成子类类型,只不过是子类回到来原来的状态罢了。
到此为止,类型转换的情况一清二楚。
 


分享到:
评论

相关推荐

    java继承 对象类型的转换 实例代码

    对象类型的转换则是指将一个对象从其实际类型转换为它的父类型或接口类型。这种转换有时被称为向上转型,因为我们在向类层次结构的上层移动。下面我们将深入探讨这两个概念,并通过实例代码来阐述它们的工作原理。 ...

    C++ 四种强制类型转换的总结

    ### C++ 四种强制类型转换的总结 在C++编程语言中,为了实现不同数据类型之间的转换,提供了四种不同的强制类型转换操作符:`static_cast`、`const_cast`、`dynamic_cast` 和 `reinterpret_cast`。这些操作符不仅在...

    对象不能从 DBNull 转换为其他类型

    2. **类型转换失败**:当`dr["score1"]`确实为DBNull.Value时,直接使用`Convert.ToInt32(dr["score1"])`会抛出异常,因为DBNull.Value不能被转换为整型。 #### 解决方案 为了正确处理这种情况,可以采用以下几种...

    常用类型转换扩展_C#_扩展_类型转换_

    在C#编程中,类型转换是开发者经常遇到的操作,它涉及到不同数据类型的相互转化。本文将深入探讨C#中常见的类型转换扩展,并介绍如何通过扩展方法来增强类型转换的便捷性和可读性。 首先,我们要了解C#内置的类型...

    js 数据类型转换总结笔记

    在JavaScript中,数据类型转换是编程过程中不可或缺的一部分。由于JavaScript是一种动态类型语言,变量的数据类型在运行时可以改变,这给编程带来了灵活性,但也可能导致一些意外的错误。本篇文章将深入探讨...

    C++四种类型转换

    如果对象类型与预期不符,则返回`nullptr`。这是唯一一种可能在运行时产生额外开销的转换,但它提供了类型安全性的保障。 \[ dynamic_cast*>(expression) \] 3. **`reinterpret_cast`**:用于底层的类型转换,...

    struts2类型转换深入总结

    其中,类型转换(Type Conversion)是Struts2框架中的一个重要功能,它允许框架将用户提交的HTTP请求数据自动转化为Action类中对应字段的类型。这篇博文深入探讨了Struts2中的类型转换机制,通过分析源码和使用工具...

    java 强制类型转换示例

    总结来说,Java中的强制类型转换是一种必要的操作,用于在不同类型之间转换值。然而,应谨慎使用,因为不适当的转换可能会导致数据丢失或运行时错误。理解类型之间的兼容性以及何时需要转换对于编写健壮的Java代码至...

    C++类型转换大全(个人总结)

    在C++编程语言中,类型转换是至关重要的概念,它允许程序员在不同数据类型之间进行操作。本资源“C++类型转换大全”涵盖了C++中常见的类型转换方式,旨在帮助开发者全面理解并熟练掌握这一技能。 一、隐式类型转换...

    Android-byte数据序列化成对象对象转化成二进制数据

    例如,基本类型可以直接转换,复杂对象需要先序列化为二进制形式。 3. 按照预定的协议结构组合所有的二进制数据,形成一个完整的二进制数据包。 4. 可能需要添加额外的校验信息,如CRC校验码,以确保数据在传输过程...

    FLEX强制类型转换

    在Flex开发中,类型转换是一个非常重要的概念,它涉及到如何将一个类型的对象转换为另一个类型的对象。特别是在ActionScript 3(AS3)中,强制类型转换是实现某些功能的关键手段之一。本文将详细介绍FLEX中的强制...

    java 数据类型转换

    在Java编程语言中,数据类型转换是至关重要的概念,它涉及到不同类型的变量之间的相互转化。Java分为两大类数据类型:基本数据类型(如int、char、float等)和引用数据类型(如类、接口和数组)。本文将深入探讨Java...

    javascript对象转换成json

    总结来说,JavaScript中的JSON转换是通过`JSON.stringify()`方法实现的,它可以方便地将JavaScript对象转换为JSON字符串,用于数据传输或存储。同时,我们可以通过提供`toJSON()`方法来自定义对象的序列化行为,以...

    JSP 9大内置对象学习总结

    ### JSP 9大内置对象学习总结 #### 一、Request对象详解 **1. 获取请求参数值** 在Web开发中,我们经常需要处理客户端发送过来的请求,并从中获取特定的参数值。JSP中的`request`对象允许我们轻松地访问这些参数...

    XStream使用方法总结-对象-转换.txt

    ### XStream使用方法总结——对象转换 XStream是一款强大的Java库,主要用于实现Java对象与XML文档之间的相互转换。本文将详细介绍XStream的基本用法、配置选项以及如何利用它来进行对象到XML的序列化和反序列化...

    数据类型转换的整理,

    在编程领域,数据类型转换是不可或...无论是简单的数值类型转换,还是复杂的对象类型转换,都需要根据具体的需求选择合适的转换方式,确保程序的正确性和效率。在日常工作中,不断实践和总结,才能更好地运用这些知识。

    mybatis 对clob类型转换

    总结,处理MyBatis中的CLOB类型转换,主要涉及自定义TypeHandler、配置MyBatis、在Mapper中应用TypeHandler,以及在编程时考虑异常处理和性能优化。通过这些步骤,可以有效地管理和操作CLOB类型数据,解决插入数据库...

    关于C++中的类型转换问题的资料

    ### 关于C++中的类型转换问题的资料 在C++编程语言中,类型转换是极为常见且重要的一个概念。它允许开发者将一种数据类型的值转换为另一种数据类型的值。这在许多情况下都是非常有用的,比如当需要将不同类型的值...

Global site tag (gtag.js) - Google Analytics