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

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");
	}
}



你可能感兴趣的:(10 Java中的多态是运行时行为or编译时行为)