多态 ---------向下或者向上类型转换

来源:互联网 发布:寒窑赋 知乎 编辑:程序博客网 时间:2024/06/06 07:27

/**

*java 语言中的向上转型和向上转型

*        1.向上转型 upcasting 子--》父  自动类型转换 父类型的引用指向子类型的对象

*            程序在编译阶段是父类的 类型

*            程序在运行阶段实际是子类的类型

*            静态绑定

*            动态绑定

*        2.向下转型 downcasting  父--》子    

*

* 注意:向上或者向下转型,两个类之间必须有继承关系

*

* 多态

*1.使用多态可以使代码之间的耦合度降低

*2.项目的扩展能力增强

*

*/

class Animal {

    public void eat(){

    System.out.println("动物在吃");

   }

}

class cat extends Animal{

    public void

    public void eat(){

        System.out.println("猫吃鱼");

    }

    public void move(){

        System.out.println("猫在走猫步");

    }

}

public class test{

    public static void main(String[] args){

        /**

         * 向上转型,可以理解为自动的类型转换

         *     父类的引用指向子类的对象

         *     程序运行的两个阶段:编译阶段 运行阶段

         *     编译阶段  认为 a1 是一个 Animal 对象

         *     运行时 实际是 cat 对象

         *

         *

         * */

        Animal a1=new cat();

        /**

         * 在编译阶段 a1的引用绑定是Animal  中的eat()方法,(静态绑定)

         * 运行的时候 cat 已经重写了eat 方法

         * 所以运行阶段,调用的是cat  的eat方法(动态绑定)

         */

        a.eat();

        /**

         * 向下转型:强制类型转换

         *

         */

        Animal a2=new cat();//向上转型

        Cat c1=(Cat)a2;//强制类型转化  java.lang.classCastException

        c1.move();

        //在强制类型转换的时候,程序是存在风险的。

         

        /**

         * 为了避免java.lang.classCastException  java 引入了 instanceof

         * 用法:

         *     1.instanceof 运行结果是 boolean类型

         *     2.(引用 instanceof 类型)-->true/false

         *     (a instanceof Cat ) 如果结果是true 则表明:a 引用指向堆中的java对象是Cat类型

         *

         * 推荐:在做向下转型的时候,要使用instanceof 判断,避免java.lang.classCastException

         */

         

        Animal a3= new Dog();

        if (a3 instanceof Cat) {

            Cat c2=(Cat) a3;

             

        }

    }

}

原创粉丝点击