Java对象类型转换实现方式(向上转型与向下转型)

 更新时间:2026年02月05日 10:41:54   作者:senxu_  
文章介绍了Java中的类型转换、继承和对象类型转换的概念,以及向上转型和向下转型的实现方法和注意事项

一.概念

1.类型转换

将一个类型强制转换成另一个类型的过程被称为类型转换。

2.继承

继承是面向对象语言中一个代码复用的机制,Java中的继承就是在已经存在类的基础上进行扩展,从而产生新的类。

已经存在的类称为父类(也叫基类或者超类),新产生的类称为子类(也叫派生类),子类继承了父类中的非私有属性和可以继承的方法(可以重写),子类可以继续扩展自己的属性及方法。

3.对象类型转换

对象类型转换,是指存在继承关系的对象,不是任意类型的对象。

Java语言允许某个类型的引用变量引用子类的实例,而且可以对这个引用变量进行类型转换。

Java中引用类型之间的类型转换(前提是两个类是父子关系)主要有两种,分别是向上转型和向下转型。

(1)向上转型

父类引用指向子类对象为向上转型,即通过子类对象(小范围)实例化父类对象(大范围),这种属于自动转换,形式如下:

FatherClass f = new SonClass();

使用向上转型可以调用父类类型中的所有成员,不能调用子类类型中特有成员。

(2)向下转型

        子类对象指向父类引用为向下转型,即通过父类对象(大范围)实例化子类对象(小范围),这种属于强制转换,形式如下:

SonClass s = (SonClass) f; 

使用向下转型可以调用子类类型中所有的成员。

注意:

如果父类引用对象是子类对象,那么在向下转型的过程中是安全的;

如果父类引用对象是父类本身,那么在向下转型的过程中是不安全的,编译不会出错,但是运行时会抛出Java强制类型转换(java.lang.ClassCastException)异常,我们一般使用instanceof运算符来避免出此类错误。

(instanceof运算符用于判断该运算符前面引用类型变量指向的对象是否是后面类或者是其子类、接口实现类创建的对象,如果是则返回true,否则返回false)

二.示例

//先写一个父类
class Transport{
    String transportName = "交通工具";
    public void run(){
        System.out.println("我正在运行");
    }
}

//再给他写一个子类
class Car extends Transport{
    String transportName = "车";
    static String transportType = "特斯拉";
    public void runType(){
        System.out.println("我在地上跑");
    }

    public static void main(String[] args) {
        Transport transport1 = new Car();  //向上转型,将Car类型转为Transport类型
        System.out.println(transport1.transportName);  //输出"交通工具"
        transport1.run();                              //输出"我正在运行"
        //但是transport1不能调用Car中的runType()方法,因为向上转型可以调用父类类型中的所有成员,不能调用子类类型中的特有成员

        System.out.println("==============我是分割线===============");

        Transport transport2 = new Car();
        if (transport2 instanceof Car){
            Car car = (Car) transport2;  //向下转型,将Transport类型转为Car类型
            //car可以调用Car中所有的成员
            System.out.println(car.transportName);   //输出"车"
            System.out.println(car.transportType);   //输出"特斯拉"
            car.run();                               //输出"我正在运行"
            car.runType();                           //输出"我在地上跑"
        }

    }

}

交通工具
我正在运行
==============我是分割线===============
车
特斯拉
我正在运行
我在地上跑

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • 利用Java自写一个生成ID的工具类

    利用Java自写一个生成ID的工具类

    平时项目中只要涉及表,那么一定能接触到众多各式各样的ID编号。本文将通过Java语言实现手写一个ID生成工具类,需要的小伙伴可以参考一下
    2022-11-11
  • Java Filter 过滤器详细介绍及实例代码

    Java Filter 过滤器详细介绍及实例代码

    Filter也称之为过滤器,它是Servlet技术中最实用的技术,本文章WEB开发人员通过Filter技术,对web服务器管理的所有web资源进行拦截,从而实现一些特殊的功能,本文章将向大家介绍Java 中的 Filter 过滤器,需要的朋友可以参考一下
    2016-12-12
  • Java中xxl-job实现分片广播任务的示例

    Java中xxl-job实现分片广播任务的示例

    本文主要介绍了Java中xxl-job实现分片广播任务的示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-03-03
  • JAVA学习之一步步搭建spring框架

    JAVA学习之一步步搭建spring框架

    这篇文章主要介绍了JAVA学习之一步步搭建spring框架,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-10-10
  • SpringBoot整合Netty心跳机制过程详解

    SpringBoot整合Netty心跳机制过程详解

    这篇文章主要介绍了SpringBoot整合Netty心跳机制过程详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-02-02
  • java8中forkjoin和optional框架使用

    java8中forkjoin和optional框架使用

    这篇文章主要介绍了java8中forkjoin和optional框架使用心得以及用法讲解,需要的朋友参考下吧。
    2017-12-12
  • Java如何主动从当前线程获取异常信息

    Java如何主动从当前线程获取异常信息

    这篇文章主要介绍了Java如何主动从当前线程获取异常信息,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-10-10
  • Java 高并发五:JDK并发包1详细介绍

    Java 高并发五:JDK并发包1详细介绍

    本文主要介绍 Java高并发JDK并发包1的资料,这里对1.各种同步控制工具的使用 2.并发容器及典型源码分析,有需要的小伙伴可以参考下
    2016-09-09
  • 对HttpServletRequest中的Header进行增删实现过程

    对HttpServletRequest中的Header进行增删实现过程

    文章介绍了如何通过反射来修改和删除HttpServletRequest中的Header,以实现对外部请求数据的自定义处理,通过示例代码和分析,展示了如何在Tomcat和Undertow容器中实现这一功能
    2025-12-12
  • javac、java打jar包命令实例

    javac、java打jar包命令实例

    这篇文章主要演示Java中使用命令打jar包的实例过程,很实用,希望能给大家做一个参考。
    2016-06-06

最新评论