Java多态
Posted 学习工作两耽误专家
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java多态相关的知识,希望对你有一定的参考价值。
在Java中有两种类型的多态性:编译时多态性和运行时多态性。
编译时多态性就是指函数的重载而已,实现方法是根据函数的名字不同来调用。
运行时多态性或动态方法分派是一个过程,它对重写方法的调用在运行时体现而不是编译时(因为方法调用是由JVM不是编译器决定的,所以它被称为运行时多态性)。
在此过程中,通过超类的引用变量调用重写的方法。 要调用的方法基于引用的对象。
1 class Super{ 2 void run() { 3 System.out.println("SuperClass running"); 4 } 5 } 6 7 class Child extends Super{ 8 void run() { 9 System.out.println("Child running"); 10 } 11 12 public static void main(String args[]) { 13 Super s = new Child ();// upcasting - 向上转换 14 s.run(); 15 } 16 }
执行上面代码得到以下结果 :
Child running
1 class Animal { 2 void eat() { 3 System.out.println("eating..."); 4 } 5 } 6 7 class Dog extends Animal { 8 void eat() { 9 System.out.println("eating bread..."); 10 } 11 } 12 13 class Cat extends Animal { 14 void eat() { 15 System.out.println("eating rat..."); 16 } 17 } 18 19 class Lion extends Animal { 20 void eat() { 21 System.out.println("eating meat..."); 22 } 23 } 24 25 class TestPolymorphism { 26 public static void main(String[] args) { 27 Animal a; 28 a = new Dog(); 29 a.eat(); 30 a = new Cat(); 31 a.eat(); 32 a = new Lion(); 33 a.eat(); 34 } 35 }
执行上面代码得到以下结果 :
eating bread...
eating rat...
eating meat...
上面示例中,都是有关方法被覆盖而不是数据成员,因此运行时多态性不能由数据成员实现。
如果重写数据成员,类似的代码只会输出超类数据成员。
多级继承中,覆盖方法也可以实现多态。
以上是关于Java多态的主要内容,如果未能解决你的问题,请参考以下文章