`
taimukang
  • 浏览: 184002 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

Java中的强制类型转换

 
阅读更多
class One {
    public void foo() {
        System.out.println("One");
    }
}

class Two extends One {
    public void foo() {
        System.out.println("Two");
    }
    public void dosth(){
        System.out.println("Two again");
    }
}

 一、向上转型

One t = new Two(); //向上转型,即父类引用指向子类对象,此时子类对象的类型为父类的类型
t.foo();
t.dosth();//编译错误

 

    结论:向上转型是安全的,但可能会丢失子类的某些特性

 

二、向下转型

One t = new Two();
t.foo();
t = (Two)t;
t.dosth();//编译错误

    这样强制转换不成功,t 的类型仍然是One。

One t = new Two(); //向上转型
Two t1 = (Two)t; // 向下转型
t1.dosth();

    向下转型成功。再例如:

Object obj = new int[] { 1, 2, 3 };
int[] someArray = (int[])obj;
for (int i : someArray) System.out.print(i + " ");

 

 

 

 

再举个例子:有两个类,Father是父类,Son类继承自Father。

 

Father f1 =new Son() ; //这就叫upcasting(向上转型)

//现在f1 引用一个指向一个Son 对象

Son s1 = (Son)f1 ;  //这个叫downcasting(向下转型)

//现在f1还是指向Son对象

 

第二个例子:

Father f2 =new Father();

Son s2=(Son)f2;     //出错,子类引用不能直接指向父类对象

 

你或许会问,在第一个例子中:Son s1=(Son)f1;为什么是正确的呢?

很简单因为f1指向指向一个子类对象,Father f1=new Son();子类s1引用当然可以指向子类对象了。

而f2被传给了一个Father对象,Father f2=new Father();子类s1引用不能指向父类对象。

 

总结:

1.父类引用指向子类对象,子类引用不能指向父类对象。

2.把子类对象直接赋给父类引用叫upcasting向上转型,向上转型不用强制转型。

如Father f1=new Son();

3.把指向子类对象的父类引用赋给子类引用叫向下转型(downcasting),要强制转型。

如f1就是一个指向子类对象的父类引用,把f1赋给子类引用s1 即Son s1=(Son)f1;

其中f1前面的(Son)必须添加,进行强制转换。


4.upcasting 会丢失子类特有的方法(下面有说明),但是子类overriding 父类的方法,子类方法有效

5.向上转型的作用, 减少重复代码

分享到:
评论

相关推荐

    Java中强制类型转换共2页.pdf.zip

    本篇文章将详细探讨Java中的强制类型转换,这是Java编程中不可或缺的知识点。 Java的类型系统分为两大类:基本类型(如int、char、boolean等)和引用类型(如类、接口实例)。在进行类型转换时,Java有自动类型转换...

    浅谈Java中强制类型转换的问题

    在Java编程语言中,强制类型转换是将一个数据类型转换为另一个不兼容的数据类型的过程。这种转换通常是必要的,因为Java是一种静态类型的语言,它要求在编译时就确定变量的类型。然而,有时我们可能需要将一个对象从...

    27.java强制类型转换.zip

    27.java强制类型转换.zip27.java强制类型转换.zip27.java强制类型转换.zip27.java强制类型转换.zip27.java强制类型转换.zip27.java强制类型转换.zip27.java强制类型转换.zip27.java强制类型转换.zip27.java强制类型...

    java 强制类型转换示例

    在Java编程语言中,强制类型转换是将一个数据类型转换为另一个兼容的数据类型的过程。这通常发生在处理不同类型的变量或对象之间需要交互的情况。在Java中,有两种类型的转换:自动类型转换(隐式转换)和强制类型...

    java 常用基础类型之强制转换

    在Java编程语言中,强制类型转换是将一个数据类型转换为另一个数据类型的语法操作。这通常发生在需要将数值从精度较高的类型转换为精度较低的类型,或者在处理对象时需要明确指定子类对象为父类类型的情况。在“java...

    深入分析java中的类型转换

    在Java中,类型转换主要分为两大类:**隐式自动类型转换**和**强制手动类型转换**。 #### 隐式自动类型转换 隐式自动类型转换指的是Java编译器自动完成的类型转换过程。这种类型的转换通常发生在较小的数据类型向较...

    Java中对null进行强制类型转换的方法

    Java中对null进行强制类型转换的方法 在 Java 中,对 null 进行强制类型转换是一个常见的操作,但是在实际开发中,是否会抛出异常呢?今天,我们将通过实例代码来介绍 Java 中对 null 进行强制类型转换的方法。 ...

    Java中类型转换.pdf

    本文介绍了 Java 中的自动类型转换和强制类型转换的方法。 自动类型转换是指不需要书写代码,由系统自动完成的类型转换。这种转换的规则是从存储范围小的类型到存储范围大的类型。具体规则为:所有的 byte、short、...

    java代码-使用java解决强制转换的源代码

    java代码-使用java解决强制转换的源代码 ——学习参考资料:仅用于个人学习使用!

    Java中自动类型转换共3页.pdf.zip

    1. **类型转换概述**:Java中的类型转换分为两种,一种是自动类型转换(也称为隐式类型转换),另一种是强制类型转换(也称为显式类型转换)。自动类型转换是由编译器自动完成的,而强制类型转换需要程序员通过特定...

    强制类型转换

    Java 中有两种主要的类型转换方式:自动类型转换(Automatic Type Conversion)和强制类型转换(Explicit Type Conversion)。下面我们将深入探讨这两种类型转换,以及它们在实际编程中的应用。 一、自动类型转换 ...

    java中数据类型转换.doc

    对于`byte`、`short` 和 `char` 这三种类型来说,它们之间不存在自动类型转换关系,但可以通过强制类型转换实现转换。 **示例代码**: ```java short short1 = 50; byte b1 = (byte) short1; // 强制类型转换 char ...

    java之java类型转换

    Java 类型转换 Java 类型转换是 Java 编程语言中的一部分,它是 Java 编程的基础,但很多时候偏偏就会在这样的基础...因此,程序员需要了解 Java 中的类型转换规则,正确地使用自动转换和强制转换来提高程序的质量。

    【IT十八掌徐培成】Java基础第02天-03.数据类型-强制类型转换.zip

    数据类型-强制类型转换”主要探讨了Java中的数据类型转换,特别是强制类型转换。 1. 基本数据类型: - 整型:byte(1字节),short(2字节),int(4字节),long(8字节) - 浮点型:float(4字节),double(8...

    java中String类型转换方法.pdf

    * 使用强制类型转换:`char c = 'A'; int i = (int) c;` 从字符串中提取 ASCII 码 可以使用以下方法从字符串中提取 ASCII 码: * 使用 `charAt()` 方法:`String test = "ABCD"; for (int i = 0; i (); ++i) { ...

    Java 多态中的类型转换

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

    Java中的强制类型转换 大数转小数

    在Java中,大数转小数的强制类型转换中,多出的高位部分会被截断。例如,int类型占4个byte(32位),byte类型占1个byte(8位),那么int类型转换为byte类型时,int的高位24个bit会被截断。 int类型转换为byte类型的...

    Java 基本语法(三)——运算符和类型转换

    显式类型转换也称为强制类型转换,用于将一个较大的数据类型转换为较小的数据类型。需要注意的是,这可能会导致数据丢失。例如: ```java double x = 9.99; int nx = (int) x; // nx 的值为 9 ``` 为了防止数据...

Global site tag (gtag.js) - Google Analytics