//向上转型 父类引用指向子类对象
//语法: 父类对象 引用变量名 = new 子类对象
Pet pet = new Dog();
//Pet(第一个Pet):父类对象
//pet(第二个pet): 引用变量名 (随意起名)
//Dog(): 子类对象
向上转型后,父类引用变量无法调用子类的特有办法
向下转型
//如果需要调用子类特有的方法,怎么办?
//向下转型:将一个指向子类对象的父类引用赋给一个子类的引用
//即:父类类型转换为子类类型。需强制类型转换
//语法:
// <子类型><引用变量名> = (<子类型>)<父类型的引用变量>;
Dog dog = (Dog)pet;
//向下转型后就可以调用子类独有的方法了
在向下转型的过程中,如果没有转换为真实子类类型,会出现类型转换异常
如何减少在向下转型的过程中,没有转换为真实子类类型的类型转换异常?
Java中提供了instanceof运算符来进行类型的判断 使用instanceof时,对象的类型必须和instanceof后面的参数 所指定的类在继承上有上下级关系if (pet instanceof Dog){ //向下转型 //子类类型 引用变量名 = (强转的子类类型) 父类引用变量名 Dog dog1 = (Dog) pet; dog1.speak(); //上两行缩写: ((Dog) pet).speak(); }else if (pet instanceof Cat){ //向下转型 //子类类型 引用变量名 = (强转的子类类型) 父类引用变量名 Cat cat1 = (Cat) pet; cat1.speak(); //上两行缩写: ((Cat) pet).speak(); }