java的前期绑定和后期绑定使用示例
更新时间:2014年02月07日 11:14:10 作者:
java的前期绑定在程序执行前根据编译时类型绑定,调用开销较小,如C语言只有前期绑定这种方法调用
后期绑定,是指在运行时根据对象的类型进行绑定,又叫动态绑定或运行时绑定。实现后期绑定,需要某种机制支持,以便在运行时能判断对象的类型,调用开销比前期绑定大。
Java中的static方法和final方法属于前期绑定,子类无法重写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()
*/
相关文章
springboot使用filter获取自定义请求头的实现代码
这篇文章主要介绍了springboot使用filter获取自定义请求头的实例代码,代码简单易懂,非常不错,具有一定的参考借鉴价值,需要的朋友可以参考下2019-05-05Java中的System类、BigInteger类和BigDecimal类详解
这篇文章主要介绍了Java中的System类、BigInteger类和BigDecimal类详解,arraycopy()方法,复制数组元素,比较适合底层调用,一般使用Arrays.copyOf()完成复制数组,需要的朋友可以参考下2023-09-09
最新评论