`
annan211
  • 浏览: 463267 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

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

    博客分类:
  • jvm
 
阅读更多
Java 语言的静态多分派和动态单分派特性。

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

    再来看看单分派和多分派

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


   那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 出来的是哪个对象  就调用哪个对象的方法,也就是说编译器忽略了参数的类型的影响,唯一存在影响的是 此方法的接收类型,因为这是动态单分派呀,我日。 
分享到:
评论

相关推荐

    Java的动态分派和静态分派的实现

    Java的动态分派和静态分派的实现 Java 的动态分派和静态分派是 Java 实现多态的本质背景。Java 的动态分派和静态分派也是 Java 方法的执行原理。在 Java 中,方法的调用是使用符号引用来表示的。当字节码被 JVM ...

    【深入Java虚拟机(5)】多态性实现机制-静态分派与动

    多态性的实现主要依赖于两种机制:静态分派和动态分派。本文将深入探讨这两种机制及其在Java虚拟机(JVM)中的应用。 **静态分派(Static Dispatch)** 静态分派发生在编译期间,即在程序执行前就已经确定了方法...

    Java语言的必知的技术点汇总.doc.pdf

    静态多分派和动态单分派,以及重载、继承、接口多实现、基类单继承、抽象类和接口、方法覆盖和多态等概念,构成了Java语言的复杂性和灵活性。 总的来说,掌握上述技术点不仅能够提升开发者编写高质量代码的能力,也...

    Java的动态绑定与双分派_动力节点Java学院整理

    动态绑定,又称晚期绑定或虚函数调用,是Java等面向对象语言的一种特性,它允许在运行时根据对象的实际类型决定调用哪个方法。 动态绑定在Java中体现在继承体系中的方法覆盖。当一个父类引用指向子类对象时,即使...

    JVM调用Lambda的表达式实现方法原理详解.docx

    分派还可以根据宗量数(影响方法选择的因素)进一步划分为静态单分派、静态多分派、动态单分派和动态多分派。静态分派只考虑静态类型,而动态分派则依赖于实际类型。Java中主要是静态分派和动态分派,但不支持静态多...

    JVM 方法调用之静态分派(详解)

    静态分派是JVM 方法调用中的一种机制,根据分派依据的宗量数可分为单分派和多分派。静态分派的典型应用是方法重载,发生在编译阶段,因此确定静态分派的动作实际上不是由虚拟机来执行的。静态类型是变量的静态类型,...

    21个Java语言的技术点.pdf

    7. 面向对象编程:理解封装、继承和多态这三大面向对象特性,以及静态多分派和动态单分派的概念。熟悉重载、继承(接口多实现,基类单继承)、抽象类、接口和多态(方法覆盖)的运用。 8. 静态关键字:了解static...

    给java新手的一些建议-java知识点归纳(java基础部份) (2).pdf

    理解它们的概念、应用场景,以及静态多分派和动态单分派、重载、接口多实现、基类单继承、抽象类、接口、多态(方法覆盖和接口回调)等概念,是成为合格Java开发者的必备条件。 最后,静态属性(Static)是Java中的...

    访问者模式商量篇:java的动态绑定与双分派_.docx

    在Java编程中,动态绑定和静态绑定是两种不同的方法调用机制,它们分别适用于不同的场景。动态绑定,也称为晚期绑定或多态性,是指在程序运行时根据对象的实际类型来决定调用哪个方法。静态绑定,又称为早期绑定,是...

    给java新手的一些建议-java知识点归纳(java基础部份).pdf

    例如,了解静态多分派和动态单分派的概念,方法重载的规则,接口多实现和类单继承的原则,以及抽象类、接口和多态的运用。 静态属性在Java开发中扮演着重要角色。开发者需要理解静态属性的概念,它们在类加载时如何...

    16.方法调用1

    这些组合形成了不同的分派策略,例如静态单分派、静态多分派、动态单分派和动态多分派。 在静态分派中,如Java的多态方法重载,调用版本在编译时就已经确定。而在动态分派中,如方法覆写,调用版本取决于运行时对象...

    java需要掌握的技术.pdf

    了解静态多分派和动态单分派的概念,以及重载和继承的使用,有助于设计出可扩展和可维护的代码。 静态属性和方法在Java中扮演着重要角色。理解static关键字的用法,包括静态变量的初始化、静态方法的调用,以及...

    如何从零开始学习Java开发.pdf

    - **静态多分派与动态单分派**:了解方法调用时的解析策略。 - **重载与覆盖**:理解方法重载的规则和覆盖的概念。 - **继承与接口**:接口多实现和类单继承的特性。 - **抽象与抽象类**:理解抽象类和接口的...

    JVM执行引擎1

    分派是JVM确定具体调用哪个方法的过程,分为静态分派(编译时已知目标)、动态分派(运行时确定目标)、单分派(依据单一宗量)和多分派(依据多个宗量)。Java中的方法重载(Overloading)属于静态多分派,而方法...

    Java pitfalls图书

    Java中的方法分派包括静态分派和动态分派,这个类可能包含关于多态性或方法重载的示例。 这些类涵盖了Java编程中的多个方面,包括集合操作、持久化、GUI布局、对象序列化、库管理以及测试实践。了解这些知识点对于...

    Java的技术点和知识点归纳.pdf

    - **静态多分派与动态单分派**:理解方法调用时的分派策略。 - **重载**:了解方法重载的规则和应用场景。 - **继承**:接口的多实现和类的单继承,以及super关键字的使用。 - **抽象类与接口**:理解两者的区别...

    如何从零开始学习Java开发.docx

    - **静态多分派与动态单分派**:了解方法调用的解析机制。 - **重载与覆盖**:理解方法重载的条件和方法覆盖的概念。 - **接口与继承**:接口多实现与类单继承,以及抽象类和接口的区别。 - **多态性**:了解...

    java需要掌握的技术.docx

    - **静态多分派与动态单分派**:理解这两个概念在方法调用中的区别。 - **重载**:学习方法重载的规则,以及何时使用。 - **继承与接口**:了解单继承和多实现的特性,以及接口在设计模式中的作用。 - **抽象与...

Global site tag (gtag.js) - Google Analytics