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、2
int 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
{
@Override
public void doSomething() {
System.out.println("Child2");
}
}
class Child3 extends Parent2
{
@Override
public void doSomething() {
System.out.println("Child3");
}
}
class Child4 extends Parent2
{
@Override
public void doSomething() {
System.out.println("Child4");
}
}