Difference between instance of class or interface
我们有一些类,例如square.class和一个接口形状,方法calculate()。类方块实现了形状接口,这里是我的问题。在另一个类中,我们有一个主方法,我想创建一个square实例,并使用calculate方法。这种类型的实例有什么区别:
1 2
| Square square = new Square ();
Shape square = new Square (); |
- 接口读取上docs.oracle.com JavaSE教程Java / / / / / zwnj概念interface.html &;& # 8203;然后读取上,中docs.oracle.com JavaSE教程Java / / / / / polymorphism.html iandi
- 可能是一个变量被重复,为什么Java中的接口名称?
唯一的区别将出现在字节码中:
1 2
| Square square = new Square();
square.calculate(); |
使用invokevirtual调用calculate方法,
1 2
| Shape square = new Square ();
square. calculate(); |
使用invokeinterface。
但两个版本都调用相同的方法。
当您将变量声明为
1
| Shape square = new Square (); |
您正在对接口进行编程,这是一件好事,因为它将使用变量square的代码与实现细节分离开来。
将来,您可能会提出更好的Shape的实现,例如EnhancedSquare。当发生这种情况时,您不需要更改使用square的代码,因为您的代码与实现类(square没有联系。