java 语言的静态多分派和动态单分派 的特性

[/code]Java 语言的静态多分派和动态单分派特性。
先来熟悉概念:
静态多分派:
静态分派 意思是 所有依赖静态类型来定位方法执行版本的分派过程就叫做静态分派,静态分派最典型的应用就是方法重载。
动态单分派:
动态单分派 意思是 根据运行期实际类型确定方法执行版本的分派过程叫做动态分派,动态分派最典型的应用就是方法重写。


再来看看单分派和多分派

单分派: 就是说 依据只有一个
多分派:就是说 依据可以有多个


那Java里面的静态多分派 意思就是,依赖静态类型来确定方法执行版本的时候,可以依据多个证据。
举个例子:

[code="java"]
public class Loder {

public static void fu(char a){
System.out.println("char");
}

public static void fu(int a){
System.out.println("int");
}

public static void fu(long a){
System.out.println("long");
}

public static void fu(float a){
System.out.println("float");
}

public static void fu(double a){
System.out.println("double");
}
public static void main(String[] args) {
fu('a');
}

public static void fu(Character a){
System.out.println("Character ");
}

public static void fu(char ... a){
System.out.println("...");
}

public static void fu(Sezrizable a){
System.out.println("Sezrizable ");
}

public static void fu(Object a){
System.out.println("Object ");
}
}


上面这段代码 输出的时候 如果存在char 参数,就输出char,如果不存在char参数,就先转为int 输出int,以此类推,会以此输出 long float double,Character , Sezrizable ,Object , ...

可以看出 多参数的优先级最低,输出 Sezrizable 是因为 其类型实现了 Sezrizable 接口

静态方法是在类加载期就进行编译,方法执行版本的选择也是静态分派进行的。依据也不是唯一的。


动态单分派 简单点就是 运行时根据确切的类型来确定执行方法的版本,而且依据是唯一的。



public class DynamicDisplay {

public static void main(String[] args) {

QQ q = new QQ();
PP p = new PP();

B b = new BB();
B b2 = new B();
b.dd(q);
b2.dd(p);
}

static class BB extends B{
public void dd(QQ a){
System.out.println("BB--BB");
}

public void dd(PP a){
System.out.println("PP--PP");
}
}
}


class B{
public void dd(QQ q){
System.out.println("QQQQ");
}

public void dd(PP q){
System.out.println("PPPP");
}
}

class QQ{

}
class PP{

}



编译器在编译期间 存在静态分派的过程,在确定执行的方法版本的时候 存在两个依据,一个是 方法参数的类型,一个是 父类的类型。

很明显 输出的 是根据 new 出来的是哪个对象 就调用哪个对象的方法,也就是说编译器忽略了参数的类型的影响,唯一存在影响的是 此方法的接收类型,因为这是动态单分派呀,我日。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

annan211

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值