Fur*_*dar 9 oop performance abstract-class interface concept
可能重复:
为什么接口方法调用比具体调用慢?
我最近有机会出现在一个采访中,面试官问抽象类和界面中哪一个更快.虽然我弄糊涂了这样一个问题,但我回答接口主要是因为我认为后期绑定的概念可能会导致抽象类性能延迟.在网上探索了同样的问题之后,我开始知道抽象方法虽然根据一些博客更快但接口方法更快.我有点困惑,所以我想要问这个问题,以正确理解哪一个更快,为什么有充分的理由.
根据以下内容,Abstract类很快,但没有正当理由. http://www.codeproject.com/Articles/11155/Abstract-Class-versus-Interface
fly*_*lyx 11
答案取决于编程语言以及您使用的编译器.在像使用运行时优化的Java VM这样的环境中,它可能根本无法应答.老实说,在一个典型的Java项目中,没有人会关心,因为即使存在差异,它也会非常小,以至于它不会显着减慢您的软件速度.除非你有严格的实时约束,否则在这种情况下你不会使用Java(可能根本就没有多态).
基本上,接口方法和抽象方法都使用动态调度,因此如果存在任何差异,则差异很小.如果不了解细节,我会假设理论上,只要语言没有为类实现多重继承,抽象方法就会更快地调度.调度向量中方法指针的位置是静态的,而不是接口方法(类通常可以实现多个接口).
但正如我所说,我不知道编译器中发生的事情的细节.可能还有其他因素我没想过.如果我不得不在一次采访中回答这个问题,我会引用Don Knuth的"过早优化是所有邪恶的根源".