关于java:类或接口实例之间的区别

Difference between instance of class or interface

我们有一些类,例如square.class和一个接口形状,方法calculate()。类方块实现了形状接口,这里是我的问题。在另一个类中,我们有一个主方法,我想创建一个square实例,并使用calculate方法。这种类型的实例有什么区别:

1
2
Square square = new Square();
Shape square = new Square();


唯一的区别将出现在字节码中:

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没有联系。