小小千想和您聊一聊

当前位置: 首页> 技术分享> Java中的静态单多分派与动态单分派

Java中的静态单多分派与动态单分派

  什么是单分派,什么是多分派呢?

  1、根据一个宗量的类型进行方法的选择称为单分派

  2、根据多于一个宗量的类型对方法的选择称为多分派

  什么是宗量?

  1、方法的接受者与方法的参数统称为方法的宗量

  public class TestDemo {

  static class Ipad{}

  static class Iphone{}

  public static class Father{

  public void hardChoice(Ipad arg){

  System.out.println("Father choice Ipad!!!");

  }

  public void hardChoice(Iphone arg){

  System.out.println("Father choice Iphone!!!");

  }

  }

  public static class Son extends Father{

  public void hardChoice(Ipad arg){

  System.out.println("Son choice Ipad!!!");

  }

  public void hardChoice(Iphone arg){

  System.out.println("Son choice Iphone!!!");

  }

  }

  public static void main(String[] args) {

  Father father = new Father();

  Son son = new Son();

  father.hardChoice(new Ipad());

  son.hardChoice(new Iphone());

  }

  }

  输出:

  Father choice Ipad!!!

  Son choice Iphone!!!

  编译阶段编译器的选择过程,也就是静态分派的过程:

  这个时候,选择目标方法依据两点:

  1、一个是静态类型Father和Son,

  2、二是方法参数Ipad和Iphone

  这次选择的结果的最终产物是产生了两条invokevirtual指令,两条指令的参数分别为常量池中指向Father.hardChoice(ipad)及Father.hardChoice(iphone)方法的符号引用。因为是根据两个宗量进行选择,所以Java语言的静态分派属于多分派类型。

  再看看运行阶段虚拟机的选择,也就是动态分派的过程:

  在执行son.hardChoice(new Ipad())这句代码时,由于编译期已经决定目标方法的签名必须为hardChoice(Ipad),虚拟机不会关心传递过来的参数到底是什么,因为这时参数的静态类型、实际类型都对方法的选择不会构成任何影响,唯一可以影响虚拟机选择的因素只有此方法的接受者的实际类型到底是Father还是Son。因为只有一个宗量作为选择一句,所以Java语言的动态分派属于单分派类型。

上一篇:Java 9 ← 2017,2019 Java → 13 ,都发生了什么?

下一篇:SpringBoot整合Thymeleaf史上最全讲解

QQ技术交流群

千锋Java开发官方②群
858309610

加入群聊

用户登录

手机号:

密码:

图形验证码:

点击切换

用户注册

手机号:

登录密码:

图形验证码:

点击切换

短信验证码:

获取验证码

忘记密码

1安全验证

2重置密码

手机号:

图形验证码:

短信验证码:

获取验证码

忘记密码

1安全验证

2重置密码

新密码:

确认新密码:

获取课程

添加小千老师微信,获取课程信息

如何获取课程?

一、需拥有此本教材

如没有,可点击下方入口购买当当购买入口京东购买入口

二、添加小千老师,发送拥有凭证,解锁课程资源

1.购买该教材的订单信息
2.拥有的实体书信息等

更换手机号

新手机号:

图形验证码:

短信验证码:

获取验证码