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多态的主要内容,如果未能解决你的问题,请参考以下文章

每个人单核苷酸多态性(SNP)形成的原因是啥?

多态性和动态铸造

Java多态——代码复用性

Java 多态

java多态/重载方法——一个疑难代码引发的讨论

Java 多态