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

本文通过一个具体的Java示例详细解释了多态的概念,并强调多态是运行时的行为而非编译时的行为。同时澄清了重写是实现多态的方式之一,而重载则不属于多态。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值