java中什么时候是用多态,什么时候不使用?

题目如下

img

img


在主函数中创建对象时,此处为什么不能写成
Shape cir=new Circle();
然后用cir来调用Circle中的set方法?

img

这是因为派生类的代码并非和基类的代码是同一个人同时写的。
考虑以下2个场景:
Java类库编写在先,你作为调用者调用它在后,那么Java类库一方肯定不能使用作为调用者的你定义的类型
主程序开发在先,允许二次开发者通过插件扩展功能,比如说Photoshop的主程序开发好了(假设PS是Java开发的,实际上是C++写的,但是类似的原理),但是允许二次开发,提供一些额外的插件功能。显然PS没法直接创建插件类型。