实现Java多态的实例

今天小编就为大家带来一篇有关Java多态实例的文章。小编觉得挺实用的,为此分享给大家做个参考。一起跟随小编过来看看吧。

创新互联专注于靖安企业网站建设,成都响应式网站建设公司,商城网站建设。靖安网站建设公司,为靖安等地区提供建站服务。全流程按需网站制作,专业设计,全程项目跟踪,创新互联专业和态度为您提供的服务

当父类型引用指向子类型对象会导致程序存在编译阶段绑定和运行阶段绑定两个不同的状态,这种机制可以成为多态机制.
向上转型:子类型-->父类型,又称为自动类型转换.
向下转型:父类型-->子类型,又称为强制类型转换.

//Animal.java
package qw;
public class Animal {
    public void move()
    {
        System.out.println("动物在移动");
    }
    public void eat() {
        System.out.println("动物在吃");
    }
}

//Bird.java
package qw;
public class Bird extends Animal{
    public void fly()
    {
        System.out.println("小鸟在飞");
    }
    public void eat() {
        System.out.println("小鸟在吃东西");
    }
}

//Cat.java
package qw;
public class Cat extends Animal{

    public void move()
    {
        System.out.println("猫在移动");
    }
    public void catchMouse()
    {
        System.out.println("猫在捉老鼠");
    }
}

//Test.java
package qw;
public class Test {
    public static void main(String[] args) {
        Animal a1 = new Animal();
        a1.move();

        //向上转型(子对象向父对象转型),a2使用的是继承的方法,可使用方法覆盖父类继承下来的方法.
        //1,编译阶段编译器检查a2这个引用的数据类型为Animal,由于Animal.class字节码当中有move()方法
        //所以编译通过了,这个阶段成为静态绑定
        //2,在程序运行阶段,由于JVM堆内存真实存在的对象是Cat对象,所以一定调用的是Cat对象的move()方法,这个过程
        //称为动态绑定
        //3.无论Cat类有没有重写方法,运行阶段调用的一定是Cat类的move()方法,因为JVM堆内存中真实存在的对象是Cat对象.
        Animal a2 = new Cat();
        a2.move();
        a2.eat();

        //如果想访问子对象特有的方法,需强制换成子对象,即向下转型(父对象向子对象转型)
        if(a2 instanceof Cat) {
            Cat a3 = (Cat)a2;
            a3.catchMouse();
        }
        else {
            Bird a3 = (Bird) a2;
            a3.fly();
        }
    }
}

运行结果:
实现Java多态的实例

以上就是实现Java多态的例子,代码详细清楚,如果在日常工作遇到这个问题,希望你能通过这篇文章解决问题。如果想了解更多相关内容,欢迎关注创新互联行业资讯频道!


分享名称:实现Java多态的实例
当前路径:http://azwzsj.com/article/jjgpdp.html