父类和子类数据类型转换?java
时间: 2023-05-26 16:05:00 浏览: 143
在Java中,父类和子类之间可以进行数据类型转换。由于子类是继承自父类的,因此子类可以被当作父类来使用,这就是所谓的向上转型(upcasting)。向上转型的操作是自动完成的,编译器会自动将子类对象转换为父类类型,如下面的代码:
```java
class Animal {
// 父类
public void eat() {
System.out.println("Animal is eating...");
}
}
class Dog extends Animal {
// 子类
public void eat() {
System.out.println("Dog is eating...");
}
public void bark() {
System.out.println("Dog is barking...");
}
}
public class Test {
public static void main(String[] args) {
Animal animal = new Dog(); // 向上转型
animal.eat(); // 输出 Dog is eating...
}
}
```
在上面的代码中,Animal类型的变量animal被赋值为Dog类型的对象,这就是一次向上转型。在调用animal.eat()时,实际上调用的是Dog类重写的eat()方法。
除了向上转型,还存在向下转型(downcasting),就是将父类对象强制转换为子类类型。但是,如果这个父类对象本身不是子类的实例,就会发生ClassCastException运行时异常。这时需要使用instanceof运算符来进行类型检查,避免出现异常。如下面的代码:
```java
class Animal {
// 父类
}
class Dog extends Animal {
// 子类
public void bark() {
System.out.println("Dog is barking...");
}
}
public class Test {
public static void main(String[] args) {
Animal animal = new Animal();
if (animal instanceof Dog) {
Dog dog = (Dog) animal; // 向下转型
dog.bark(); // 此处会发生ClassCastException异常
}
}
}
```
在上面的代码中,animal对象不是Dog类型的实例,因此如果直接进行向下转型,就会发生ClassCastException异常。所以使用instanceof运算符来判断类型,只有确定是子类的实例时,才进行转型。
阅读全文