後の結合とは、動的結合またはランタイム結合としても知られる実行時のオブジェクトのタイプに従ってバインディングを指します。遅い結合を実装するには、オブジェクトのタイプを実行時に審査できるように、これによってサポートされる必要があり、コールオーバーヘッドは以前のバインディングのメカニズムよりも大きくなります。
Javaの静的方法と最終的な方法は、初期のバインドであり、最終的な方法をオーバーライドできません。静的方法と最終的な方法(私生は最終的な方法に属する)を除く他の方法は後で結合し、ランタイム中にバインドするオブジェクトのタイプを決定できます。検証手順は次のとおりです。
コードコピーは次のとおりです。
クラスベース
{
//メンバー変数、サブクラスにも同じメンバー変数名があります
public string test = "ベースフィールド";
//静的メソッド、サブクラスには同じ署名の静的メソッドもあります
public static void staticmethod()
{
system.out.println( "base staticmethod()");
}
//サブクラスはこの方法をオーバーライドします
public void notstaticmethod()
{
system.out.println( "base notstaticmethod()");
}
}
パブリッククラスは、ベースを拡張します
{
public string test = "derive field";
public static void staticmethod()
{
system.out.println( "derive staticmethod()");
}
@オーバーライド
public void notstaticmethod()
{
system.out.println( "derive notstaticmethod()");
}
//メンバー変数の値を出力し、それが以前のバインディングであることを確認します。
public static void testfieldbind(ベースベース)
{
System.out.println(base.test);
}
//静的メソッドは、それが以前のバインディングであることを確認します。
public static void testStaticMethodBind(ベースベース)
{
//タイプベースの静的メソッドテスト()に静的方法でアクセスする必要があります
// base.test()を使用する方がここで使用されます。
base.StaticMethod();
}
//非静的な方法を呼び出し、それらが遅いバインディングであることを確認します。
public static void testnotstaticmethodbind(ベースベース)
{
base.notstaticmethod();
}
public static void main(string [] args)
{
derive d = new derive();
testfieldbind(d);
testStaticMethodBind(D);
testnotstaticmethodbind(d);
}
}
/*プログラム出力:
ベースフィールド
base staticmethod()
notStaticMethod()を導き出す
*/