Upcasting and Downcasting in Java

2025年4月24日 | 阅读 3 分钟

将一种数据类型转换为另一种数据类型的过程称为类型转换,而向上转型向下转型是对象类型转换的一种。在Java中,对象也可以像基本数据类型一样进行类型转换。父类子类对象是两种类型的对象。因此,对于对象来说,存在两种类型的类型转换:父类到子类子类到父类,或者说向上转型向下转型

Java中,对象也可以像基本数据类型一样进行类型转换。父类子类对象是两种类型的对象。因此,对于对象来说,存在两种类型的类型转换:父类到子类子类到父类,或者说向上转型向下转型

类型转换用于确保变量是否被函数正确处理。在向上转型向下转型中,我们同时将子类对象转换为父类对象父类对象转换为子类对象。我们可以隐式或显式地执行向上转型,但向下转型不能隐式地进行。

Upcasting and Downcasting in Java

让我们深入了解这两种类型的对象转型

1) 向上转型

向上转型是一种对象类型转换,其中子类对象被转换为父类对象。通过使用向上转型,我们可以轻松地将父类的变量和方法访问到子类。在这里,我们并不访问所有变量和方法。我们只访问子类中某些指定的变量和方法。向上转型也称为泛化缩小转换(注意:这里原文的“Widening”在Java中通常指自动拓宽基本类型,用于对象转型时,描述子转父的“向上”的概念,可能与基本类型转换的“Widening”概念有所混淆,但通常理解为可以由子类引用指向父类类型)。

UpcastingExample.java

输出

Upcasting and Downcasting in Java

2) 向下转型

向上转型是另一种对象类型转换(此处原文有误,应为“向下转型”)。在向上转型中,我们将父类引用对象赋给子类。在Java中,我们不能将父类引用对象赋给子类,但如果我们执行向下转型,将不会出现编译时错误。然而,当我们运行时,它会抛出“ClassCastException”。现在的问题是,如果向下转型在Java中不可行,那么为什么编译器允许呢?在Java中,某些场景允许我们执行向下转型。在这里,子类对象被父类引用。

下面是一个向下转型示例,其中解释了有效和无效的场景

DowncastingExample.java

输出

Upcasting and Downcasting in Java

为什么我们需要向上转型和向下转型?

在Java中,我们很少使用向上转型。当我们需要开发一个仅处理父类的代码时,我们使用它。向下转型用于我们需要开发访问子类行为的代码时。

Upcasting and Downcasting in Java

向上转型与向下转型之间的区别

以下是向上转型和向下转型之间的区别

序号向上转型向下转型
1.子类对象被转换为父类对象。父类对象的引用被赋给子类。
2.我们可以隐式或显式地执行向上转型。隐式向下转型是不可能的。
3.在子类中,我们可以访问父类的所有方法和变量。可以通过向下转型访问父类和子类(两个类)的所有方法和变量。
4.我们可以访问子类的某些指定方法。通过向下转型,可以访问两个类的所有方法和变量。
5.Parent p = new Parent()Parent p = new Child()
Child c = (Child)p;