java父子类型转换_彻底理解java父子类之间的转换
时间: 2023-10-17 19:23:25 浏览: 74
在Java中,父子类之间的类型转换主要有两种方式:向上转型和向下转型。
向上转型是指将子类对象赋值给父类引用变量,这个过程是隐式的,也就是不需要进行强制类型转换。例如:
```
class Animal {
public void eat() {
System.out.println("Animal is eating");
}
}
class Dog extends Animal {
public void bark() {
System.out.println("Dog is barking");
}
}
Animal a = new Dog(); // 向上转型
a.eat(); // 调用父类方法
```
向下转型是指将父类对象强制转换为子类对象,这个过程是显式的,也就是需要进行强制类型转换。例如:
```
Animal a = new Dog(); // 向上转型
Dog d = (Dog) a; // 向下转型
d.bark(); // 调用子类方法
```
需要注意的是,向下转型只能在向上转型的基础上进行,也就是说,只有当一个对象被向上转型为父类对象后,才能被向下转型为子类对象。否则,会出现ClassCastException异常。例如:
```
Animal a = new Animal();
Dog d = (Dog) a; // 编译通过,但会抛出ClassCastException异常
```
此外,还需要注意的是,在进行向下转型时,需要确保父类对象实际上是一个子类对象,否则也会出现ClassCastException异常。例如:
```
Animal a = new Animal();
Dog d = (Dog) a; // 编译通过,但会抛出ClassCastException异常
// 正确的做法
if (a instanceof Dog) {
Dog d = (Dog) a;
d.bark();
}
```
相关推荐
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)