10 Java中的多态是运行时行为or编译时行为

来源:互联网 发布:卡五星麻将源码 编辑:程序博客网 时间:2024/05/16 14:07

1.多态不是编译时行为,是运行时的行为

2.Thinking in Java中:People areoften confused by other,non-object-oriented features of Java, like methodoverloading, which are sometimes presented as object-oriented. Don’t be fooled:If it isn’t late binding,it isn’t polymorphism.

由上可知:重写是多态,重载(overloading)不是多态


例子:PoliTest.java

package com.test;import java.util.Random;public class PoliTest {//多态不是编译时行为,是运行时的行为public Parent2 generate(){/* * main函数中的Parent2引用指向哪个 * 子类(Child2或Child3或Child4),是由运行时产生的随机数得到,由此可知多态是 * 运行时行为,不是编译时行为 *  */Random random = new Random();//返回值为3个:0、1、2int number = random.nextInt(3);switch (number){case 0: return new Child2();case 1: return new Child3();case 2: return new Child4();}return null;}public static void main(String[] args) {PoliTest pt = new PoliTest();Parent2 p = pt.generate();p.doSomething();}}class Parent2{public void doSomething(){System.out.println("Parent2");}}class Child2 extends Parent2{@Overridepublic void doSomething() {System.out.println("Child2");}}class Child3 extends Parent2{@Overridepublic void doSomething() {System.out.println("Child3");}}class Child4 extends Parent2{@Overridepublic void doSomething() {System.out.println("Child4");}}