概述
一、多态弊端
父类不能使用子类特有成员。(需类型转换)
类型转换:
1、向上转型(自动类型转换,子类转换成父类)
Animal animal = new Dog();
2、向下转型(强制类型转换,父类转换成子类)
Dog dog = (Dog)animal;
二、数据类型转换注意点
1、只能在继承层次内进行转换,否则报类型转换异常(ClassCastException)
2、将父类对象转换成子类前,使用instanceof检查
if(animal instanceof Dog) {
Dog dog = (Dog)animal;
}
代码演示:
父类:Animal
/*
父类动物类
*/
public class Animal {
public void eat() {
System.out.println("吃饭");
}
}
子类:Dog和Cat
/*
子类狗类
*/
public class Dog extends Animal {
@Override
public void eat() {
System.out.println("狗吃骨头");
}
//子类独有的方法,父类没有这个成员方法
public void watch() {
System.out.println("狗会看家看家");
}
}
/*
子类猫类
*/
public class Cat extends Animal {
}
测试类
/*
测试类,多态类型转换的注意点
只能在继承层次内进行转换,否则报ClassCastException异常
所以将父类对象转换成子类时,先用instanceof进行检查
对象名 instanceof 数据类型
*/
public class Test {
//main函数是程序的主入口,所有代码都是从这里开始的
public static void main(String[] args) {
//通过多态创建对象,调用子类的成员
Animal animal = new Dog();
//调用eat()
animal.eat();
//调用watch,子类特有,需要强转数据类型
/*//正确写法
Dog dog = (Dog)animal;
dog.watch();*/
/*//错误写法(错误理解狗是动物,猫是动物,猫是狗)
//报类型转换异常ClassCastException
Cat cat = (Cat)animal;*/
//为了解决错误写法的发生,通过instanceof判断优化方案
//判断当前对象如果是Dog类的对象,是则调用watch()方法
if (animal instanceof Dog) {
Dog dog = (Dog)animal;
dog.watch();
}
}
}
最后
以上就是欢喜茉莉为你收集整理的多态中数据类型转换的注意点的全部内容,希望文章能够帮你解决多态中数据类型转换的注意点所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复