Java向上转型和向下转型区别
时间: 2023-08-13 10:03:03 浏览: 127
java向上转型和向下转型.doc
4星 · 用户满意度95%
Java中的向上转型和向下转型都是针对对象的类型转换操作。
向上转型是将子类对象赋值给父类引用变量的操作,即将一个子类类型的对象赋值给一个父类类型的引用变量。向上转型是安全的,因为一个子类对象是一定可以转换为它的父类类型的,这是Java语言中多态性的体现。
例如:
```
class Animal {
public void move() {
System.out.println("动物在移动");
}
}
class Dog extends Animal {
public void move() {
System.out.println("狗在奔跑");
}
}
public class Test {
public static void main(String[] args) {
Animal animal = new Dog(); // 向上转型
animal.move();
}
}
```
向下转型是将父类对象转换为子类对象的操作,即将一个父类类型的对象转换为它的子类类型。向下转型是不安全的,因为一个父类对象并不是一定可以转换为它的子类类型的,如果进行了不合理的向下转型,会导致运行时异常。
例如:
```
class Animal {
public void move() {
System.out.println("动物在移动");
}
}
class Dog extends Animal {
public void move() {
System.out.println("狗在奔跑");
}
public void bark() {
System.out.println("狗在叫");
}
}
public class Test {
public static void main(String[] args) {
Animal animal = new Dog(); // 向上转型
animal.move();
Dog dog = (Dog)animal; // 向下转型
dog.bark();
}
}
```
在上面的代码中,先进行了一个向上转型将Dog对象赋值给Animal引用变量,然后进行了一个向下转型将Animal对象转换为Dog对象,这是合理的,因为Dog对象本身就是Animal对象,但是如果将一个父类类型的对象强制转换为它的子类类型,而这个对象并不是这个子类类型的实例,就会导致ClassCastException运行时异常。所以在进行向下转型之前,需要先进行类型判断,可以使用instanceof运算符来判断。
阅读全文