Java:什么是向上转型与向下转型(详细图解)
向上转型(Upcasting):
向上转型是将一个子类对象直接赋值给父类类型的变量。这样,父类类型的变量就可以引用子类对象,并且只能引用子类对象的父类部分。
向下转型(Downcasting):
向下转型是指将一个父类对象强制转换为子类类型。在进行向下转型之前,需要先进行向上转型,否则会出现ClassCastException
。
向上转型示例代码:
class Parent {
void show() {
System.out.println("Parent's show()");
}
}
class Child extends Parent {
void show() {
System.out.println("Child's show()");
}
}
public class Main {
public static void main(String[] args) {
Parent parent = new Child(); // 向上转型
parent.show(); // 调用的是Parent的show方法
}
}
向下转型示例代码:
class Parent {
void show() {
System.out.println("Parent's show()");
}
}
class Child extends Parent {
void show() {
System.out.println("Child's show()");
}
}
public class Main {
public static void main(String[] args) {
Parent parent = new Child(); // 向上转型
Child child = (Child) parent; // 向下转型
child.show(); // 调用的是Child的show方法
}
}
在向下转型时,如果父类对象不是子类的实例,则会抛出ClassCastException
。为了安全地进行向下转型,可以使用instanceof
运算符来检查一个对象是否是特定类的实例。
安全向下转型示例代码:
class Parent {
void show() {
System.out.println("Parent's show()");
}
}
class Child extends Parent {
void show() {
System.out.println("Child's show()");
}
}
public class Main {
public static void main(String[] args) {
Parent parent = new Child(); // 向上转型
if (parent instanceof Child) {
Child child = (Child) parent; // 安全向下转型
child.show(); // 调用的是Child的show方法
}
}
}
评论已关闭