Позднее связывание относится к связыванию в соответствии с типом объекта в среде выполнения, также известного как динамическое связывание или связывание времени выполнения. Чтобы внедрить позднее обязательство, необходимо поддерживать некоторые механизм, чтобы тип объекта мог быть оценен во время выполнения, а накладные расходы вызовов больше, чем у предыдущего привязки.
Статические методы и окончательные методы в Java являются ранними привязками. Другими методами, за исключением статических методов и окончательных методов (частные принадлежности к конечным методам), позже являются связывание и могут определить тип объекта для связывания во время выполнения. Процедура проверки заключается в следующем:
Кода -копия выглядит следующим образом:
классная база
{
// переменные -члены, подклассы также имеют одинаковое имя переменной члена
public String test = "Базовое поле";
// Статические методы, подклассы также имеют статические методы с той же подписью
общественный статический void staticmethod ()
{
System.out.println ("base staticmethod ()");
}
// подклассы будут переопределять этот метод
public void notstaticmethod ()
{
System.out.println ("base notstaticmethod ()");
}
}
Общедоступный класс Defers расширяет базу
{
public String test = "DERIVE FIELD";
общественный статический void staticmethod ()
{
System.out.println ("derive staticmethod ()");
}
@Override
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)
{
Def d = new derive ();
TestfieldBind (D);
TestStaticMethodBind (D);
testnotstaticmethodbind (d);
}
}
/*Вывод программы:
Базовое поле
Базовый staticmethod ()
Dever notstaticmethod ()
*/