zl程序教程

您现在的位置是:首页 >  后端

当前栏目

java的前期绑定和后期绑定使用示例

JAVA 使用 示例 绑定 后期 前期
2023-06-13 09:15:17 时间

后期绑定,是指在运行时根据对象的类型进行绑定,又叫动态绑定或运行时绑定。实现后期绑定,需要某种机制支持,以便在运行时能判断对象的类型,调用开销比前期绑定大。
Java中的static方法和final方法属于前期绑定,子类无法重写final方法,成员变量(包括静态及非静态)也属于前期绑定。除了static方法和final方法(private属于final方法)之外的其他方法属于后期绑定,运行时能判断对象的类型进行绑定。验证程序如下:

复制代码代码如下:


classBase
{
   //成员变量,子类也有同样的成员变量名
   publicStringtest="BaseField";
   //静态方法,子类也有同样签名的静态方法
   publicstaticvoidstaticMethod()
   {
       System.out.println("BasestaticMethod()");
   }
   //子类将对此方法进行覆盖
   publicvoidnotStaticMethod()
   {
       System.out.println("BasenotStaticMethod()");
   }

}
publicclassDeriveextendsBase
{
   publicStringtest="DeriveField";
   publicstaticvoidstaticMethod()
   {
       System.out.println("DerivestaticMethod()");
   }
   @Override
   publicvoidnotStaticMethod()
   {
       System.out.println("DerivenotStaticMethod()");
   }
   //输出成员变量的值,验证其为前期绑定。
   publicstaticvoidtestFieldBind(Basebase)
   {
       System.out.println(base.test);
   }
   //静态方法,验证其为前期绑定。
   publicstaticvoidtestStaticMethodBind(Basebase)
   {
       //Thestaticmethodtest()fromthetypeBaseshouldbeaccessedinastaticway
       //使用Base.test()更加合理,这里为了更为直观的展示前期绑定才使用这种表示。
       base.staticMethod();
   }
   //调用非静态方法,验证其为后期绑定。
   publicstaticvoidtestNotStaticMethodBind(Basebase)
   {
       base.notStaticMethod();
   }
   publicstaticvoidmain(String[]args)
   {
       Derived=newDerive();
       testFieldBind(d);
       testStaticMethodBind(d);
       testNotStaticMethodBind(d);
   }
}
/*程序输出:
BaseField
BasestaticMethod()
DerivenotStaticMethod()
 */