栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

什么是编译时多态?什么是运行时多态?

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

什么是编译时多态?什么是运行时多态?

什么是编译时

只是单纯的将代码翻译成一种中间语言(例如:java代码被编译后生成字节码文件)

编译时会做一些代码语法的检查提醒

编译时没有实质性的为代码分配内存空间运行,所以可以说编译是静态类型检查

什么是运行时

为代码分配空间,让代码跑起来

此时可能会出现编译时发现不了的错误(例如:数组越界问题,由于编译时并未分配空间,所以是无法检查出这个问题的)

什么是Java编译时多态

通过编译即可明确是哪一个多态方法的调用

  • 比如说Java的重载,只通过参数的数量和类型不同来实现多态,那么在编译时我们可以单纯根据语法就能知道会调用哪一个重载的方法,所以所有的重载都是编译时多态

  • 再比如说Java的覆写,通过本类的对象引用指向本类的对象,可以明确是调用本类的覆写方法

什么是Java运行时多态

通过运行才能明确是哪一个多态方法的调用

例如,Java有一个语法:父类的引用可以指向子类的对象,并且可以通过父类引用使用父子类共有的方法

那么调用该方法时,使用哪个类中的方法呢

这个问题光靠编译是解决不了的

我认为是在代码运行后,在子类的方法栈中看具体有该方法,若没有,再通过继承关系逐级向上从父类的方法栈中寻找,直到找到为止

运行时多态有什么作用呢

用代码模拟现实的业务逻辑需求,但是生活中的需求会不断改变,那么代码也要跟着翻天覆地的“重写”吗?

以下面的代码为例

class Shape{
	void printArea(){}
}

class square extends Shape{
	void printArea(){}
}



class users{
	void GetArea(Shape s){ //由于这里是父类的引用,可以指向所有子类,所以增添新的子类,这里也不用改变,体现代码的可拓展
		s.printArea();
	}
	
	
	
}

class Test{
	public static void main(String[] msg){
		new users().GetArea(new square());
		//假如用户还想知道其他的形状的面积,只需要new users().GetArea(new circle());
	}
}

//在现实生活中,列不完的需求出现时,运行时多态即可体现它的好处
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/459792.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号