网站开发和,wordpress不允许注册,vscode的网站开发配置,wordpress 仿雷锋在Java中#xff0c;类型转换主要涉及到两种类型#xff1a;向上类型转换#xff08;Upcasting#xff09;和向下类型转换#xff08;Downcasting#xff09;。
1. 向上类型转换#xff08;Upcasting#xff09;#xff1a;
向上类型转换是将子类的对象转换为父类类…在Java中类型转换主要涉及到两种类型向上类型转换Upcasting和向下类型转换Downcasting。
1. 向上类型转换Upcasting
向上类型转换是将子类的对象转换为父类类型的对象。这种转换是自动的也是安全的因为子类对象包含所有父类对象的信息。所以在将子类对象赋值给父类类型的引用时编译器会自动完成转换而不需要程序员进行任何特殊的操作。向上转型会让子类对象“缩小”只能调用父类中的方法对于子类中新增的方法则不可调用了。
package com.test2;class Animal {void makeSound() {System.out.println(这个动物在发出声音。);}
}class Dog extends Animal {void makeSound() {System.out.println(这个狗在汪汪叫。);}void makeMove() {System.out.println(这个狗在欢快地奔跑。);}
}public class UpcastingTest {public static void main(String[] args) {Dog myDog new Dog();myDog.makeSound();myDog.makeMove();Animal myAnimal myDog; // 向上类型转换安全并自动发生myAnimal.makeSound(); // }
}
在上面代码这个例子中Dog是Animal的子类。当我们创建一个Dog对象并将其赋值给Animal类型的变量时就发生了向上类型转换。myAnimal变量是赋值为原myDog对象变量转换后的值。则myAnimal失去了子类Dog中新增的方法makeMove()。
但是子类Dog重写了父类Animal的MakeSound()方法Dog类实例对象myDog转换为Animal类对象赋值给myAnimal对象是失去了新增方法但是调用的makeSound()方法依然是Dog类中重新写的方法。如果Dog类中没有重写makeSound()方法转化前和转换后都将是调用父类中的方法。
2. 向下类型转换Downcasting
在Java中要成功进行向下转型从父类到子类必须满足以下两个条件
1对象必须是子类的实例 对象实际上必须是你要转型的子类的一个实例。如果对象不是子类的实例那么转型会失败并抛出ClassCastException异常。
2显式类型转换 必须使用类型转换操作符(子类类型)来进行向下转型。编译器会检查转型的合法性并且在运行时也会进行类型检查。
下面是一个成功向下转型的例子
class Animal {void makeSound() {System.out.println(Animal makes a sound);}
}class Dog extends Animal {void bark() {System.out.println(Dog barks);}
}public class Main {public static void main(String[] args) {// 创建一个Dog对象Animal animal new Dog();// 检查对象是否实际是Dog的实例if (animal instanceof Dog) {// 显式向下转型为Dog类型Dog dog (Dog) animal;// 现在可以调用Dog类特有的方法dog.bark();} else {// 如果不是Dog的实例则不执行转型System.out.println(Cannot cast to Dog);}}
}在这个例子中animal变量被声明为Animal类型但实际上它引用了一个Dog对象。通过instanceof检查我们确认animal实际上是Dog的一个实例然后安全地将其转型为Dog类型。转型成功后我们就可以调用Dog类中的方法了。
总之成功向下转型的关键在于确保对象确实是你想要转型的子类的一个实例并且在转型前使用instanceof来验证这一点。如果不确定对象是否是特定子类的实例就应该避免进行向下转型以防止运行时错误。
简单理解
1向上转换子类创建的实例变量赋值给一个父类类型的变量这是合法允许的但是会进行“向上转换”父类类型的变量虽然被赋值了子类实例但是会阉割掉子类中新增的方法和父类相同的方法依然可以使用使用的是子类中定义的方法。
2向下转换这是不建议的需要满足2个条件才可以否则发生会失败而发出异常。两个条件是父类定义的变量是通过实例化子类赋值的只是该变量被声明成了父类的类型经过显式的类型转化后重新转换为子类类型的变量可以使用子类中定义的相关方法。