手机版
你好,游客 登录 注册
背景:
阅读新闻

理解Java中的前期绑定和后期绑定

[日期:2014-02-06] 来源:Linux社区  作者:Linux [字体: ]

前期绑定,在程序执行前根据编译时类型绑定,调用开销较小,如C语言只有前期绑定这种方法调用。

后期绑定,是指在运行时根据对象的类型进行绑定,又叫动态绑定或运行时绑定。实现后期绑定,需要某种机制支持,以便在运行时能判断对象的类型,调用开销比前期绑定大。

Java中的static方法和final方法(private属于final方法,详细的解释见《Java编程思想》)属于前期绑定,子类无法重写final方法,成员变量(包括静态及非静态)也属于前期绑定。除了static方法和final方法(private属于final方法)之外的其他方法属于后期绑定,运行时能判断对象的类型进行绑定。验证程序如下:

class Base
{
   
//成员变量,子类也有同样的成员变量名
    public String test="Base Field";
   
//静态方法,子类也有同样签名的静态方法
    public static void staticMethod()
    {
        System.out.println(
"Base staticMethod()");
    }
   
//子类将对此方法进行覆盖
    public void notStaticMethod()
    {
        System.out.println(
"Base notStaticMethod()");
    }
   
}
public class Derive extends Base
{
   
public String test="Derive Field";
   
public static void staticMethod()
    {
        System.out.println(
"Derive staticMethod()");
    }
    @Override
   
public void notStaticMethod()
    {
        System.out.println(
"Derive notStaticMethod()");
    }
   
//输出成员变量的值,验证其为前期绑定。
    public static void testFieldBind(Base base)
    {
        System.out.println(base.test);
    }
   
//静态方法,验证其为前期绑定。
    public static void testStaticMethodBind(Base base)
    {
       
//The static method test() from the type Base should be accessed in a static way
       
//使用Base.test()更加合理,这里为了更为直观的展示前期绑定才使用这种表示。
        base.staticMethod();
    }
   
//调用非静态方法,验证其为后期绑定。
    public static void testNotStaticMethodBind(Base base)
    {
        base.notStaticMethod();
    }
   
public static void main(String[] args)
    {
        Derive d
=new Derive();
        testFieldBind(d);
        testStaticMethodBind(d);
        testNotStaticMethodBind(d);
    }
}
/*程序输出:
Base Field
Base staticMethod()
Derive notStaticMethod()
*/

linux
相关资讯       Java前期绑定  Java后期绑定 
本文评论   查看全部评论 (0)
表情: 表情 姓名: 字数

       

评论声明
  • 尊重网上道德,遵守中华人民共和国的各项有关法律法规
  • 承担一切因您的行为而直接或间接导致的民事或刑事法律责任
  • 本站管理人员有权保留或删除其管辖留言中的任意内容
  • 本站有权在网站内转载或引用您的评论
  • 参与本评论即表明您已经阅读并接受上述条款