类或接口实例之间的区别

时间:2015-06-07 22:29:25

标签: java interface instance abstract

我们有一些类的图像,例如Square.class和一个接口Shape,方法是calculate()。 Square类实现了Shape接口,这是我的问题。在其他一些我们有主方法的类中,我想创建一个square的实例并使用calculate方法。这类实例有什么区别:

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

2 个答案:

答案 0 :(得分:1)

将变量声明为

Shape square = new Square();

您已经编程接口,这是一件好事,因为它将使用变量square的代码与实现细节分离开来。

将来,您可能会更好地实施Shape,例如EnhancedSquare。发生这种情况时,您不需要更改使用square的代码,因为您的代码与实现类(Square)无关。

答案 1 :(得分:1)

唯一的区别在于字节码:

Square square = new Square();
square.calculate();

使用invokevirtual来调用calculate方法

Shape square = new Square();
square.calculate();

使用invokeinterface

但两个版本都调用相同的方法。