系列文章目录
【Java基础】Java总览_小王师傅66的博客-CSDN博客
[Java基础]基本概念(上)(标识符,关键字,基本数据类型)_小王师傅66的博客-CSDN博客
[Java基础]基本概念(下)运算符,表达式和语句,分支,循环,方法,变量的作用域,递归调用_小王师傅66的博客-CSDN博客
Java字节码分析快速入门/字节码执行分析(一)_java 字节码_小王师傅66的博客-CSDN博客
[Java基础]面向对象-关键字分析:this,static,final,super_小王师傅66的博客-CSDN博客JVM-运行时数据区_小王师傅66的博客-CSDN博客[Java基础]面向对象-关键字分析:this,static,final,super_小王师傅66的博客-CSDN博客
文章目录
系列文章目录
文章目录
前言
1、向上转型(upcasting)
2、向下转型(downcasting)
3、实现多态
4、将基本数据类型转换为包装类
5、将字符串转为基本类型或其他类型
总结
前言
在这篇文章中,我们将继续学习Java基础知识:对象转型。对象转型在Java应用中非常广泛,在这篇文章中,我将系统的为大家梳理一下。
1、向上转型(upcasting)
指将一个子类类型的对象转型为父类类型,这样可以使其适合父类类型的变量。这是最常见的转型,可以简化代码。
Animal animal = new Cat();
2、向下转型(downcasting)
指将一个父类类型的对象转型为子类类型,这样可以访问子类特有的属性和方法。但是注意,向下转型时需要做类型检查避免ClassCastException。
Animal animal = new Cat();
Cat cat = (Cat) animal;
这时候,我们就可以通过cat对象访问Cat类中的属性和方法。
那什么时候回抛出ClassCastException呢?
1)向一个实际类型并非为目标类型的对象进行强制类型转换时
Object obj = new Integer(10);
String str = (String) obj; // 这里会抛出ClassCastException异常
2)当一个原本兼容的对象,在运行过程中变成不兼容时进行转换。
Object obj = getObj(); // 返回Integer对象
// 一段代码运行后,obj指向一个String对象
Integer i = (Integer) obj; // 这里会抛出ClassCastException异常
遇到ClassCastException的时候,要检查转型的代码,确保对象的实际类型与目标类型匹配,避免无效的转换。另外,为避免该异常,可以在转型前使用instanceof操作符检查对象的类型,或者try-catch语句捕获该异常。
3、实现多态
多态依赖于向上转型和向下转型。向上转型可以使子类对象赋值给父类变量,向下转型可以将父类对象恢复为子类类型。
Animal animal = new Cat();
animal.makeSound(); // 调用Cat的方法。因为此时animal在内存中指向Cat类生成的对象
4、将基本数据类型转换为包装类
通过将基本类型转型为包装类,可以访问包装类的方法。
int i = 1;
Integer num = (Integer) i;
5、将字符串转为基本类型或其他类型
通过转型可以将字符串Parses为所需类型。
int i = (int) "123";
总结
1、一个基类引用类型的对象可以指向其子类的对象;
2、一个基类的引用不能指向其子类新增的属性和方法;
3、可以使用 引用类型 instance of 类名的方式来判断该引用类型所指向的对象属于该类还是该类的子类;
4、子类对象可以当基类对象使用叫做向上转型(upcasting),基类对象可以当做子类对象使用称为向下转型(downcasting)
所以综上,对象转型在实现多态、转换数据类型以扩展对象功能等方面都有重要作用。同时需要注意转型过程中的可兼容性和安全性。