`
kabike
  • 浏览: 606140 次
  • 性别: Icon_minigender_1
  • 来自: 大连
社区版块
存档分类
最新评论

java的静态绑定和动态绑定

阅读更多
看如下代码
abstract class F {

	private String foo = "foo in F";
	public abstract String getStupidName();

	public void bar() {
		System.out.println(this.getStupidName());
	}
}

class S1 extends F {
	private String foo = "foo in S1";

	@Override
	public String getStupidName() {
		return foo;
	}

}

class S2 extends F {
	private String foo = "foo in S2";

	@Override
	public String getStupidName() {
		return foo;
	}

		F f = new S1();
		f.bar();
		f = new S2();
		f.bar();

的输出是
foo in S1
foo in S2
显而易见,java的method的绑定是动态绑定的,但是field如何绑定呢,把F的代码改成如下形式
abstract class F {

	private String foo = "foo in F";
	public abstract String getStupidName();

	public void bar() {
		System.out.println(this.foo);
	}
}

输出则变成了
foo in F
foo in F

看上去field是静态绑定的

不过java specification似乎也是这么说的
http://docs.oracle.com/javase/specs/jls/se7/html/jls-15.html#jls-15.11

里面提到
Note that only the type of the Primary expression, not the class of the actual object referred to at run-time, is used in determining which field to use.

This lack of dynamic lookup for field accesses allows programs to be run efficiently with straightforward implementations. The power of late binding and overriding is available, but only when instance methods are used.
0
1
分享到:
评论

相关推荐

    Java动态绑定和静态绑定.doc

    在Java编程语言中,动态绑定和静态绑定是两个重要的概念,它们涉及到方法调用和多态性。了解这两个概念对于深入理解面向对象编程至关重要。本文将详细探讨它们的区别,并通过实例来阐述它们的工作原理。 首先,让...

    Java中的静态绑定和动态绑定Java开发Java经验技巧

    在Java编程语言中,静态绑定和动态绑定是两个至关重要的概念,它们关乎程序的执行效率和灵活性。了解这两个概念对于提升Java开发技能至关重要。 首先,我们来解释一下静态绑定(也称为早期绑定)。静态绑定主要涉及...

    Java 静态绑定与动态绑定深入分析

    Java中的静态绑定与动态绑定是面向对象编程中的关键概念,它们决定了方法调用的方式和时机。静态绑定(也称为早期绑定或编译时绑定)和动态绑定(也称为晚期绑定或运行时绑定)是Java中多态性实现的基石。 **静态...

    理解Java中的静态绑定和动态绑定

    在Java编程语言中,静态绑定和动态绑定是两种不同的方法调用机制,它们与面向对象编程密切相关。这两种绑定方式决定了程序在运行时如何选择和执行特定的方法。 静态绑定(早期绑定),也称为编译时绑定,是指在程序...

    《剑指offer》Java理解静态绑定与动态绑定.pdf

    Java中的静态绑定与动态绑定是面向对象编程中的两个核心概念,它们关系到程序的编译与运行时行为。理解这两个概念对于写出高效、灵活的代码至关重要。 首先,静态绑定(也称为前期绑定或编译时绑定)是指在编译期间...

    Java中的静态绑定和动态绑定

     在Java中存在两种绑定方式,一种为静态绑定,又称作早期绑定。另一种是动态绑定,亦称为后期绑定。  区别对比  静态绑定发生在编译时期,动态绑定发生在运行时  使用private或static或final修饰的变量或者...

    java动态绑定和静态绑定用法实例详解

    "Java动态绑定和静态绑定用法实例详解" Java中的绑定机制是指将一个方法的调用与方法所在的类(方法主体)关联起来。Java中存在两种类型的绑定机制:静态绑定和动态绑定。 静态绑定是指在程序执行以前已经被绑定...

    Java中的静态绑定和动态绑定详细介绍

    Java中的静态绑定和动态绑定是面向对象编程中的关键概念,它们决定了程序在运行时如何解析方法调用和访问成员变量。 静态绑定,也称为早期绑定,是指在编译期间就已经确定了方法调用的具体实现。这通常发生在方法的...

    Java方法的动态绑定与静态绑定

    对java来说,绑定分为静态绑定和动态绑定;或者叫做前期绑定和后期绑定。  静态绑定:  在程序执行前方法已经被绑定,此时由编译器或其它连接程序实现。例如:C。  针对java简单的可以理解为程序编译期的...

    Java多态中的动态绑定与静态绑定

    Java虚拟机的动态绑定与静态绑定 大家可能都知道Java面向对象的三大特性,封装,继承,多态,其中动态绑定就与多态有关,那什么是动态绑定呢? 1.动态绑定(auto binding):也叫后期绑定,在运行时,虚拟机根据具体...

    浅谈Java中的重载,重写,多态,静态绑定、动态绑定

    Java中的重载、重写、多态、静态绑定和动态绑定的知识点总结 Java 中的重载(Overload)是一种机制,允许在同一个类中定义多个具有相同名称的方法,这些方法的参数个数、参数类型和顺序不能相同。返回类型可以相同...

    java 静态代码块通过类加载器获取资源文件例子

    首先,静态代码块是在类被加载到JVM(Java虚拟机)时执行的一段代码,它不依赖于类的实例创建,而是与类本身绑定。静态代码块常用于初始化静态变量或进行一次性的系统设置。例如,在本案例中,可能是在程序启动时...

    走进Java语言中的方法绑定.pdf

    在Java中,方法绑定分为两种类型:静态绑定(Static Binding)和动态绑定(Dynamic Binding)。 1. 静态绑定(Static Binding) 静态绑定又称为早期绑定,它发生在编译阶段。编译器根据引用类型的定义来决定调用...

    RoboVM和libGDX的绑定[用java调用ios的静态库.a]

    总结起来,通过RoboVM和libGDX的绑定,开发者能够在Java环境中调用iOS的静态库,实现了跨平台开发的无缝对接。这极大地扩展了libGDX的应用场景,并降低了开发iOS应用的学习曲线,尤其是在已有Java代码基础的情况下。...

    Java的静态/动态绑定

    总结来说,静态绑定和动态绑定都是Java多态性的重要组成部分。静态绑定在编译时确定,适用于方法重载;动态绑定在运行时确定,适用于方法重写。理解这两种绑定机制有助于我们更好地设计和实现面向对象的程序,充分...

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

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

    Java动态绑定的方法重载的实现.zip

    在Java中,非静态的实例方法调用是动态绑定的,这意味着编译器并不知道具体调用哪个方法,而是在运行时根据对象的实际类型来决定。这是基于多态性的一个关键特性。多态性允许子类对象可以被视为父类对象,从而能够...

    Java多态中动态绑定原理解析

    静态绑定可以使用private、static和final修饰的方法或构造器来实现。例如,private void method(){}或static void method(){}等。 动态绑定是在运行时根据对象的运行时类型进行绑定的过程。它是Java中除静态绑定的...

    RabbitMQ工具类实现配置文件动态创建队列和绑定

    本篇文章将重点讲解如何使用RabbitMQ结合Java实现一个工具类,动态地根据配置文件创建队列和绑定。 首先,我们需要了解RabbitMQ的基本概念。在RabbitMQ中,队列(Queue)是存储消息的地方,生产者(Producer)发送...

Global site tag (gtag.js) - Google Analytics