什么是 Java 中的向上转换和向下转换? 简单说明

已发表: 2021-01-22

目录

Java中的向上转换和向下转换

Java 中的类型转换是指涉及将一种数据类型转换为另一种数据类型的过程。 这可以自动和手动完成。 虽然程序员必须自己进行手动转换,但编译器用于自动过程。 向下转换和向上转换本质上是两种类型的对象类型转换。

子对象和父对象是两种不同类型的对象。 现在,有两种方法可以帮助初始化对象,随后还可以继承子类和父类所具有的属性。 这些方式包括:

  • Child c = new Child():访问子类和父类下的所有成员
  • Parent p = new Child():只访问父类成员,以及子类中已经被覆盖的方法

从本质上讲,Parent 到 Child 的类型转换称为 Upcasting,而 Child 到 Parent 的类型转换称为 Downcasting。

类型转换系统用于确保变量是否由函数准确处理。 虽然隐式向下转换是不可能的,但可以显式和隐式地执行向上转换。

向下转换和向上转换都是 Java 的重要元素,使人们能够使用简单的语法开发复杂的程序。 它们还具有一些很大的优势,例如将不同的对象组合在一起或多态性。

从世界顶级大学学习在线软件开发课程获得行政 PG 课程、高级证书课程或硕士课程,以加快您的职业生涯。

向上转型

在向上转换中,子对象是对父类对象的类型转换。 通过使用这个过程,人们可以轻松地访问父类到子类的区别方法和变量。 在该过程中只需要访问子类的某些特定方法和变量,例如被覆盖的方法。 在许多情况下,向上转换也称为扩展和泛化。 向上转型可以隐式进行,并为人们提供访问父类成员的灵活性。

以下示例有助于更好地理解该过程。

示例:有一个动物类别,其中包含不同类别的动物,鱼就是其中之一。 现在,假设动物类由鱼类扩展,将有两种继承方式。 继承是面向对象编程或 OOP 的关键方面之一,它允许一个类继承另一个类的特性。 这意味着派生类是基类的超集。 这里可能有比基类更多的方法。 在向上转换期间,类接口唯一可能发生的事情是它最终可能会丢失方法而不是获得它们。 因此,编译器无需任何类型的特殊符号或显式转换即可启用向上转换。

组合与继承

当涉及到面向对象编程时,很有可能最终通过将方法和数据打包到一个类中来完成创建和使用,然后使用该类中存在的对象。 人们甚至可以使用某些现有的类来开发具有组合的新类。 继承相对很少使用。 在学习 OPP 时,尽管继承确实得到了很多关注,但重要的是开发人员知道它的正确用法,并且不要试图在任何可能的地方简单地使用它。

事实上,必须很少使用它,仅用于发现继承实际上有用的场景。 确定一个人是否应该使用继承或组合的最简单方法之一是询问自己是否需要从新演员表向上转换为基础演员表。 如果向上转换是必要的,那么就必须使用继承。 但是,如果这不是一项要求,则必须进一步详述继承的必要性。

垂头丧气

向下转换是对象类型转换的另一种形式,用于将子类引用对象指定给 Java 中不允许的父类。 垂头丧气并不太难理解。 例如,如果有一个基类和一个间接或间接从基类派生的类,那么任何时候基类类型的对象继续被类型转换为派生类,它被称为向下转换。 因此,根据向下转换,人们将通过努力获取基类对象然后将其转换为派生类类型来沿着继承图向下移动。 但是,重要的是要注意,根据正在编写的代码,向下转换可能有意义,也可能没有意义。

当人们执行向下转换系统时,他们不会遇到任何类型的编译器错误。 但是,他们将面临 java.lang.ClassCastException,这是一个运行时异常。 所以现在问题出现了,如果在 Java 中无法进行向下转换,那么人们为什么要执行它呢? 简单地说,向下转换只能在父类引用的对象属于子类的特定情况下使用。

在将一个对象与另一个对象进行比较时,向下转换非常有用。

要检查向下转换是否有效,可以运行

getClass() 系统使开发人员能够了解传入对象的类,然后将其与当前类进行比较。 如果它们不相等,则向下转换无效,尝试此过程将毫无意义。 向下转换的概念主要使用超类型到子类型的转换。 这种铸造过程通常以显式方式完成。 这基本上意味着较大尺寸的类型被明确地适合小尺寸类型。

向上转型与向下转型

上调和。 向下转换具有某些非常特殊的差异。 其中一些已在以下指针中简要强调:

  • 在向上转换中,子对象被类型转换为父对象。 另一方面,当涉及向下转换时,父类对象的引用最终会传递给子类。
  • 人们可以显式地和隐式地执行向上转换,而只能显式地执行向下转换。
  • 在向上转换的情况下,人们可以在子类中访问父类的变量和方法,反之则不行。 然而,在向下转换中,这两个类的变量和方法都很容易访问。
  • Upcasting 只允许访问特定的子类方法。 在执行向下转换时,两个类下的所有方法和变量都可以访问。

结论

在 Java 中很少使用向上转换。 在大多数情况下,人们在必须开发只处理父类的代码时使用它。 在开发提供对子类行为的访问的代码时,倾向于使用向下转换。

如果你想学习Java并获得云计算认证, upGrad 提供云计算高级证书课程 为期 7.5 个月的在线课程专为在职专业人士设计,帮助他们进入云计算角色。

成为全栈开发人员

立即申请利物浦约翰摩尔斯的计算机科学硕士