课后作业
class Mammal{}
class Dog extends Mammal {}
class Cat extends Mammal{}
public class TestCast
{
public static void main(String args[])
{
Mammal m;
Dog d=new Dog();
Cat c=new Cat();
m=d;
//d=m;
d=(Dog)m;
//d=c;
//c=(Cat)m;
}
}
向上转型(自动转换):子类对象可以直接赋值给父类引用(如m = d),因为子类 "是一种" 父类(狗是一种哺乳动物),这是安全的,编译器允许自动转换。
向下转型(强制转换):父类引用不能直接赋值给子类引用,必须通过(子类类型)显式强制转换(如d = (Dog) m)。
转换成功的前提:父类引用实际指向的是该子类的对象(如m实际指向Dog对象,转换为Dog成功)。
若父类引用指向的是其他子类对象(如m指向Dog,却强制转换为Cat),编译时不会报错,但运行时会抛出ClassCastException。
同级子类间不能直接转换:Dog和Cat都是Mammal的子类,但彼此无继承关系,因此d = c或强制转换d = (Dog) c都会编译失败。
浙公网安备 33010602011771号