黑马程序员---Java基础学习之面向对象的多态问题

来源:互联网 发布:js实例经典 编辑:程序博客网 时间:2024/05/20 18:49
这是我的学习笔记,老师讲了没多久,大家一起学习,请补充.

面向对象的多态
多太就是事物(对象)的多种表现形态
父类指向子对象
多态的好处:让程序的扩展性变的更强,不用在面对具体的子类对象
多态的弊端:只能访问父类的功能,无法使用子类特有的功能.

:
Class animal{Abstract void eat();Abstract void sleep();}Class cat(){......}Class dog(){......}Class test{Public static void main(String[] args){Dog d =  new dog();Method(d); }Public static void Method (animal a){    A.ect();A.sleep();}}

多态中的类型转换
1.多态中的自动类型提升
Dog d = new dog();
Animal a = new dog();
引用的类型是Animal的类型,而引用所指的类型Animal的子类类型。
    这时就发生了类型的自动提升。把Animal子类类型提升成了Animal类型。
这种类型的提升会导致无法使用子类特有的方法,如果想要使用子类的特有方法,必须将animal类型再转成对应的子类型,才能去使用.
2.类型向下转型(强制类型转换)
Animal a =new dog();
Dog d = (dog)a;
animal 类型强转成子类型.
当我们把一个子类型强制转换成其他类型(这个类型不是子类的父类),会发生ClassCastException异常.
ClassCastException 叫作类型转换异常.
如何避免这个异常呢?
在进行向下转型时,应该先做类型判断,当符合强转要求时,我们才进行强转,否则就不进行转换.
健壮性判断用到if关健字,判断类型是否可转



        public static void method(Animal a)        {                a.eat();                //a.lookHome();编译报错,原因是这里a是Animal类型,只能使用Animal中描述的功能,而无法使用子类特有的功能                if( a instanceof Dog )                {                        Dog d = (Dog)a;                        d.lookHome();                }                a.sleep();        }


0 0
原创粉丝点击