在Java中何时使用静态绑定,何时使用动态绑定



最近我正在学习如何使用Slf4j。我还知道了两个新概念:静态绑定和动态绑定。在JCL(Jakarta Commons Logging)中,它使用动态绑定来选择实现,而Slf4j使用静态绑定。在这种情况下,我们知道Slf4j更明智。但是其他情况呢?

如果我们遇到一个问题,我们可以解决它使用静态绑定和动态绑定,那么我们如何选择?有什么基本的规则吗?

我的英语不是很好。所以我不确定我是否讲清楚了。如果你还有问题,欢迎评论。

THX .

此处:链接

静态绑定和动态绑定的几个重要区别

1) Java中的静态绑定发生在编译时,而动态绑定发生在运行时。

2) private、final和static方法和变量使用静态绑定并由编译器绑定,而virtual方法在运行时基于运行时对象绑定。

3)静态绑定使用类型(Java中的类)信息进行绑定,而动态绑定使用对象来解析绑定。

重载的方法使用静态绑定,重载的方法在运行时使用动态绑定。

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");
    }
 }

输出:汽车内部启动方法

相关内容

  • 没有找到相关文章

最新更新