哪个是更快的抽象类或接口?

时间:2013-12-27 07:49:08

标签: java performance

编辑: 注意:这是一个面试问题而不是绩效优化流程。

请澄清我的疑问: 抽象类和接口实现有各自的优势,但实现的性能间隔更快?

public class Client {
  public static void main(String[] args) {
    ClsA obj = new ClsA();
    obj.display();

    InterfaceC obj1 = new ImplD();
    obj1.display();
  }
}

//我可以通过上述两种方式调用display()方法。哪一个表现更好?

public class ClsA extends AbstractB {
}

public class AbstractB {
  public void display() {
    System.out.println("---display---");
  }
}

public interface InterfaceC {
  public void display();
}

public class ImplD implements InterfaceC {
  @Override
  public void display() {
    System.out.println("---display ImplD---");
  }
}

根据我的理解,扩展任何课程都会导致较差的表现。原因是如果我们为子类创建obj JVM也为超类对象分配内存。

但是我的朋友说实现任何接口都会导致性能降低。原因是 这里(InterfaceC obj1 = new ImplD();)JVM必须找到哪个是实现的类指向接口引用。因此,查找需要一段时间。但是在扩展其他类JVM时没有任何困难,因为超类和子类之间的链接只在编译时发生。

请告诉我哪一个表现更好?

2 个答案:

答案 0 :(得分:2)

两者都没有明显更快。不要根据您对性能调整的猜测来设计您的API,这几乎肯定无关紧要;使用接口和抽象类,它们在概念上是合适的。

答案 1 :(得分:0)

在现代JRE中,它们之间的任何性能差异都将非常小,如果重要的话可能会被JIT优化掉。不,我认为在这种情况下,首先甚至没有性能差异。

一位智者曾经说过:

  

我们应该忘记小的效率,比如大约97%的时间:过早的优化是所有邪恶的根源