把派生类对象赋给基类对象有什么用?


Derive A; //派生类对象A
Base B; //基类对象B
A.fun(); //操作1
A=B;
A.fun(); //操作2
把B赋给A是可以的 但是操作1的结果和操作2的结果我测试后是一样的。。

试想,你编写了一个软件,允许第三方开发者为它编写插件。你应该怎么做?
很明显,你应该定义基类或者接口。插件开发者实现这个基类或者接口,并且编写扩展软件功能的代码。
你的主程序在加载了插件后,显然只能通过基类类型访问插件。因为在你开发主程序的时候,肯定插件还没有开发,否则怎么谈得上扩展呢?

学习面向对象,一定要在实际的软件设计中理解。每一种编程语言的语法,都是有它实际的用途的。

   首先,从语法上没有区别。但是大多数情况下,我们写代码时,关联的都是上层抽象类型,即我们只关心拥有某个对象的上层类型,而不关心它具体是哪种类型,那么不管外界给我们哪种它的底层子类,都不影响我这个类的功能。这就是依赖抽象的好处,其实这是设计模式的思想,主要作用就是让我能更容易复用和维护代码,等你写代码久了,接触的多了,就会逐渐体会这样依赖上层的优势了。

上述代码有误区,面向对象和面向接口的实际效用就是体现在派生类上面。

派生类没有重新实现过基类的函数fun,那就是完完全全的继承,因此上面的操作效果必定是一样的。如果在Base的fun里面打印出Base,在Derive的fun打印出Derive,效果就会不一样。这也才是基类与派生类的重要特征与作用。