首页 / JAVA / Java静态分派和动态分派
Java静态分派和动态分派
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了Java静态分派和动态分派,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1614字,纯文字阅读大概需要3分钟。
内容图文
![Java静态分派和动态分派](/upload/InfoBanner/zyjiaocheng/645/11eea4aab2764f848b65900ce3aad1f6.jpg)
文章参考:https://blog.csdn.net/ns_code/article/details/17965867
public class StaticDispatch {
static abstract class Humnan {}
static class Man extends Humnan {}
static class Woman extends Humnan {}
public void hello(Humnan guy) {
System.out.println("hello, Humnan");
}
public void hello(Man guy) {
System.out.println("hello, Man");
}
public void hello(Woman guy) {
System.out.println("hello, Woman");
}
public static void main(String[] args) {
Humnan man = new Man();
Humnan woman = new Woman();
StaticDispatch dispatch = new StaticDispatch();
dispatch.hello(man);
dispatch.hello(woman);
}
}
这段代码的运行结果是:
hello, Humnan
hello, Humnan
这是静态分派机制
所有依赖静态类型来定位方法执行版本的分派动作,都称为静态分派,静态分派的最典型应用就是多态性中的方法重载。静态分派发生在编译阶段,因此确定静态分配的动作实际上不是由虚拟机来执行的
Human man = new Man();
上面代码中的“Human”称为变量的静态类型,后面的“Man”称为变量的实际类型。静态类型和实际类型在程序中都可以发生一些变化,区别是静态类型的变化仅仅在使用时发生,变量本身的静态类型不会被改变,并且最终的静态类型是在编译期可知的,而实际类型变化的结果在运行期才可确定。
在调用hello()方法时,方法的调用者都为dispatch的前提下,使用哪个重载版本,完全取决于传入参数的数量和数据类型(方法的参数也是数据宗量)。代码中刻意定义了两个静态类型相同、实际类型不同的变量,可见编译器(不是虚拟机,因为如果是根据静态类型做出的判断,那么在编译期就确定了)在重载时是通过参数的静态类型而不是实际类型作为判定依据的。并且静态类型是编译期可知的,所以在编译阶段,Javac编译器就根据参数的静态类型决定使用哪个重载版本。这就是静态分派最典型的应用
内容总结
以上是互联网集市为您收集整理的Java静态分派和动态分派全部内容,希望文章能够帮你解决Java静态分派和动态分派所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。