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