我明白为什么这是一个法律声明,但为什么它会有用呢?
这与刚开始有什么不同:
Bear bear = new Bear(); //?
我该怎么办对象Animal bear = new Bear();我不能用后者做什么?
尝试澄清:
宣布这样的事情之间的实际差异是什么:
A. SuperClass x = new SubClass();
对,
B. SubClass x = new SubClass();
对于A中你不能用B做的对象,你能做些什么?你为什么要声明这样的对象呢?
谢谢!
答案 0 :(得分:4)
通常,只要有可能,就应该使用松耦合。在某种程度上,这意味着您的代码应该尽可能少地了解它使用的对象。如果您的代码足以知道它是Animal
,那么为什么要让它知道它是Bear
?下周,您可能希望使用Chicken
运行代码。
通过将自己限制在由Animal
公开的界面,您现在可以轻松地放入其中任何其他特定动物,并且您知道您没有使用任何Bear
- 具体方法。
答案 1 :(得分:0)
实现多态性并为所有动物编写通用代码,而不是具体承担。
所以,Animal animal = new Bear(),我们可以使用相同的参考来指向其他不同的动物。
答案 2 :(得分:-1)
我说我看到的主要区别是Bear bear = new Bear();
被定义为对象Bear
,而Animal bear = new Bear();
是对象Animal
。此方法将新熊定义为动物,而另一个定义新熊作为熊。两者实际上是相同的,但是如果您需要特定对象中的new Bear()
,则一种方法可能更有用。