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();                           //输出"我在地上跑"
        }

    }

}

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

总结

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

相关文章

  • SpringBoot配置嵌入式服务器的实操演示

    SpringBoot配置嵌入式服务器的实操演示

    文章介绍了Servlet、Filter和Listener在JavaWeb开发中的作用及生命周期,文章详细说明了如何在SpringBoot中注册Servlet、Filter和Listener,并通过实操演示验证了它们的功能,本文给大家讲解的非常详细,感兴趣的朋友跟随小编一起看看吧
    2025-11-11
  • java中将科学计数法转换普通计数法的简单方法

    java中将科学计数法转换普通计数法的简单方法

    下面小编就为大家带来一篇java中将科学计数法转换普通计数法的简单方法。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2016-12-12
  • 深入理解Java设计模式之迭代器模式

    深入理解Java设计模式之迭代器模式

    这篇文章主要介绍了JAVA设计模式之迭代器模式的的相关资料,文中示例代码非常详细,供大家参考和学习,感兴趣的朋友可以了解
    2021-11-11
  • Java向数据库中插入数据后获取自增ID的常用方法

    Java向数据库中插入数据后获取自增ID的常用方法

    有时候因为新增的需求需要获取刚刚新增的数据的自增的主键ID,下面这篇文章主要给大家介绍了关于Java向数据库中插入数据后获取自增ID的常用方法,文中通过代码介绍的非常详细,需要的朋友可以参考下
    2023-11-11
  • Java并发 synchronized锁住的内容解析

    Java并发 synchronized锁住的内容解析

    这篇文章主要介绍了Java并发 synchronized锁住的内容解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-09-09
  • 浅谈springMVC中controller的几种返回类型

    浅谈springMVC中controller的几种返回类型

    这篇文章主要介绍了浅谈springMVC中controller的几种返回类型,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2021-02-02
  • SpringBoot3实现数据备份操作的多种方法全解析

    SpringBoot3实现数据备份操作的多种方法全解析

    在当今数字化时代,数据已然成为企业最为宝贵的资产之一,Spring Boot 3 作为一款广受欢迎的 Java 开发框架,为我们实现高效、可靠的数据备份操作提供了丰富的工具与便捷的方式,下面我们就来看看具体实现方法吧
    2025-12-12
  • java使用Socket实现SMTP协议发送邮件

    java使用Socket实现SMTP协议发送邮件

    这篇文章主要为大家详细介绍了java使用Socket实现SMTP协议发送邮件的相关资料,感兴趣的小伙伴们可以参考一下
    2016-05-05
  • SpringBoot外部化配置示例解析

    SpringBoot外部化配置示例解析

    这篇文章主要介绍了SpringBoot外部化配置示例解析,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-02-02
  • Mybatis动态查询字段及表名的实现

    Mybatis动态查询字段及表名的实现

    本文主要介绍了Mybatis动态查询字段及表名的实现,通过灵活运用Mybatis提供的动态SQL功能,我们可以构建更加灵活、高效的查询语句,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2024-01-01

最新评论