假设有两个类:Person类是父类,Man类继承自Person类。
第一个例子:
Person p1 = new Man(); // 这就叫 upcasting (向上转型)
Man m1 = (Man)p1; // 这就叫 downcasting (向下转型)
第2个例子:
Person p2 = new Person();
Man m2 = (Man)p2; // 出错,子类引用不能指向父类对象
注意:向上转型,子类对象会遗失跟父类不同的方法。只能保留重写的方法,来动态绑定。
解释&总结:
1.第一个例子中,p1指向一个子类Man对象,Person p1 = new Man(); 子类m1引用当然可以指向子类Man对象。
2.第二个例子中,p2指向一个父类Person对象,Person p2 = new Person();;子类s1引用不能指向父类对象。
3.向上转型,实际上是将父类引用指向子类对象,这是可行的;但是一定注意子类引用不能直接指向父类对象,这会导致编译器无错误,运行时将出错(ClassCastException异常)。这就是麻雀一定是鸟,但鸟不一定是麻雀的道理(麻雀是鸟的子类)。
4.从第一个例子看出,实际使用中,一般地,如果想向下转型,必须先向上转型。如果当前程序段只有Man m1 = (Man)p1,懒得去上面找是否p1是否是向上转型得来的,可以使用instanceof关键字来避免异常。如下:
if(p1 instanceof Man){
Man m1 = (Man)p1
}
在第二个例子中,
Man m2 = (Man)p2; 就可以采用这种形式。这样,就一定不会报错了。因为这里先使用instanceof
来判断p1是否是Man的实例化对象。
分享到:
相关推荐
Java 向上转型与向下转型 Java 转型是 Java 编程中的一种非常重要的概念,主要包括向上转型和向下转型两种。向上转型是指将子类对象转换为父类对象,而向下转型是指将父类对象转换为子类对象。 向上转型...
什么是向下转型和向上转型
在Java编程语言中,向上转型和向下转型是对象多态性的关键组成部分,它们涉及到对象的类型转换,使得程序设计更加灵活且易于维护。下面将详细解释这两种转型的概念、原理及应用。 ### 向上转型 向上转型指的是将一...
本文将深入探讨Java中的向上转型和向下转型,同时提供简单的实例来帮助理解这些概念。 首先,让我们了解一下向上转型。向上转型(Upcasting)是指将子类对象赋值给父类引用。在Java中,这是自动完成的,因为子类...
这种继承关系使得子类能够具备父类的特性,同时也允许在代码中进行类型转换,即向上转型和向下转型。本文将深入探讨这两种转型方式以及如何正确使用它们。 **向上转型(Upcasting)** 向上转型是指将子类对象赋值给...
"Java 向上转型和向下转型的详解" Java 向上转型和向下转型是面向对象编程语言中的一个重要概念,它们都是继承机制的基础上进行转型的。向上转型是将子类对象转换为父类类型的过程,而向下转型是将父类对象转换...
17.2.1 回顾“向上转型”与“向下转型”.mp4
"Java向上转型和向下转型实例解析" 在Java中,向上转型和向下转型是两个非常重要的概念,它们都是基于继承机制的。向上转型是指子类对象转换为父类或接口,而向下转型是指父类对象转换为子类。了解向上转型和向下...
Java基础精品课12-抽象类录屏1.向下转型和向上转型.mp4
其实向上转型和向下转型都是很重要的,可能我们平时见向上转型多一点,向上转型也比较好理解。 但是向下转型,会不会觉得很傻,我是要用子类实例对象,先是生成子类实例赋值给父类引用,在将父类引用向下强转...
6. **向上转型与向下转型的区别** 上向转型是自动的,不需要显式转换,即子类对象可以赋值给父类引用,这在多态中非常常见。而向下转型是显式的,需要程序员手动进行,以获取子类的特有功能。 7. **使用接口进行...
本文将深入探讨对象引用与对象的区别、多态性、向上转型和向下转型以及栈和堆内存的管理。 首先,让我们了解对象引用与对象的区别。对象是根据类实例化出来的实体,它们在内存中的位置通常在堆区,具有实际的数据和...
在面向对象编程中,向下转型和`instanceof`运算符是两种重要的概念,尤其是在多态性的实现中扮演关键角色。本文将深入探讨这两个主题,并结合Delphi编程语言的背景进行阐述,尽管`instanceof`运算符在Java中更为常见...
- **多态**:多态性允许不同类的对象对同一消息作出不同的响应,实现接口(implements)和类的向上向下转型(upcasting和downcasting)是实现多态的方式。 - **抽象类与接口**:抽象类可以有抽象方法(没有方法体...
1. 向下转型必须先向上转型,否则会发生异常。 2. 下转型对象可以引用子类和父类的属性和方法。 代码示例: ```java public class Shangz { int a = 1; int b = 2; void cal() { System.out.println(a * b); ...
浅谈Java中向上造型向下造型和接口回调中的问题 Java 中的向上造型、向下造型和接口回调是 Java 编程中非常重要的概念。下面我们将对这三个概念进行详细的介绍。 向上造型(Upcasting) 向上造型是指将子类对象...
这通常发生在两种情况:向上转型(Upcasting)和向下转型(Downcasting)。向上转型是自动的,无需显式Cast,它将子类对象视为其父类对象,这在多态性中非常常见。而向下转型则需要显式Cast,因为它涉及到将父类对象...
在上述实例中,我们探讨了两种主要的转型方式:向上转型(upcasting)和向下转型(downcasting)。 1. 向上转型(Upcasting): 向上转型是自动进行的,无需显式声明。当我们将子类对象赋值给基类引用时,就发生了...
java向上转型与向下转型
本文将深入探讨Object类、对象转型(向上转型和向下转型)以及多态的概念。 **第一节: Object类** Object类是所有Java类的基类,它位于类层次结构的根节点。这意味着,无论你创建哪个自定义类,最终都会间接地...