实现Java多态的实例
发表于:2024-11-30 作者:热门IT资讯网编辑
编辑最后更新 2024年11月30日,今天小编就为大家带来一篇有关Java多态实例的文章。小编觉得挺实用的,为此分享给大家做个参考。一起跟随小编过来看看吧。当父类型引用指向子类型对象会导致程序存在编译阶段绑定和运行阶段绑定两个不同的状态,
今天小编就为大家带来一篇有关Java多态实例的文章。小编觉得挺实用的,为此分享给大家做个参考。一起跟随小编过来看看吧。
当父类型引用指向子类型对象会导致程序存在编译阶段绑定和运行阶段绑定两个不同的状态,这种机制可以成为多态机制.
向上转型:子类型-->父类型,又称为自动类型转换.
向下转型:父类型-->子类型,又称为强制类型转换.
//Animal.javapackage qw;public class Animal { public void move() { System.out.println("动物在移动"); } public void eat() { System.out.println("动物在吃"); }}//Bird.javapackage qw;public class Bird extends Animal{ public void fly() { System.out.println("小鸟在飞"); } public void eat() { System.out.println("小鸟在吃东西"); }}//Cat.javapackage qw;public class Cat extends Animal{ public void move() { System.out.println("猫在移动"); } public void catchMouse() { System.out.println("猫在捉老鼠"); }}//Test.javapackage 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多态的例子,代码详细清楚,如果在日常工作遇到这个问题,希望你能通过这篇文章解决问题。如果想了解更多相关内容,欢迎关注行业资讯频道!