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

这是我的学习笔记,老师讲了没多久,大家一起学习,请补充.

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

:
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();
        }


你可能感兴趣的:(学习心得,java,黑马程序员)