我们有一些类的图像,例如Square.class和一个接口Shape,方法是calculate()。 Square类实现了Shape接口,这是我的问题。在其他一些我们有主方法的类中,我想创建一个square的实例并使用calculate方法。这类实例有什么区别:
Square square = new Square();
Shape square = new Square();
答案 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();
但两个版本都调用相同的方法。