Когда использовать статическое связывание, а когда использовать динамическое связывание в Java?

Недавно я учусь использовать Slf4j. И я знаю две новые концепции: статическое связывание и динамическое связывание. В JCL(Jakarta Commons Logging) оно использует динамическое связывание, чтобы выбрать реализацию, в то время как Slf4j использует статическое связывание. В этом случае мы знаем, что Slf4j более мудрый. Но как насчет другого случая?

Если мы сталкиваемся с проблемой, которую мы можем решить как с помощью статического связывания, так и с помощью динамического связывания, то как мы выбираем? Есть ли основные правила?

Мой английский не очень хороший. Так что я не уверен, ясно ли я дал понять. Если у вас есть еще вопросы, пожалуйста, прокомментируйте.

СПАСИБО.

1 ответ

Здесь: Ссылка

Немного важного различия между статическим и динамическим связыванием

1) Статическое связывание в Java происходит во время компиляции, тогда как динамическое связывание происходит во время выполнения.

2) закрытые, конечные и статические методы и переменные используют статическое связывание и связываются компилятором, тогда как виртуальные методы связываются во время выполнения на основе объекта времени выполнения.

3) Статическая привязка использует информацию о типе (класс в Java) для привязки, а динамическая привязка использует объект для разрешения привязки.

3) перегруженные методы связываются с использованием статического связывания, а переопределенные методы связываются с использованием динамического связывания во время выполнения.

Пример статического связывания в Java

 public class StaticBindingTest  
 {  
  public static void main(String args[])  
  {
    Collection c = new HashSet();
    StaticBindingTest et = new StaticBindingTest();
    et.sort(c);
  }
  //overloaded method takes Collection argument
  public Collection sort(Collection c)
  {
     System.out.println("Inside Collection sort method");
     return c;
  }
  //another overloaded method which takes HashSet argument which is sub class
 public Collection sort(HashSet hs)
 {
    System.out.println("Inside HashSet sort method");
    return hs;
 }
}

Вывод: метод сортировки внутри коллекции

Пример динамического связывания в Java

 public class DynamicBindingTest 
 {
    public static void main(String args[]) 
    {
        Vehicle vehicle = new Car(); //here Type is vehicle but object will be Car
        vehicle.start();       //Car's start called because start() is  overridden method
    }
 }

 class Vehicle 
 {
     public void start() 
     {
       System.out.println("Inside start method of Vehicle");
     }
 }
 class Car extends Vehicle 
 {
    @Override
    public void start() 
    {
       System.out.println("Inside start method of Car");
    }
 }

Вывод: метод внутреннего запуска автомобиля

Другие вопросы по тегам