java向上造型有何意义?

一直搞不懂向上造型到底好在哪?Father p=new Son();我用p还是只能点出Father中的方法,有什么意义啊?那我不如直接用Father p=new Father();不是一样吗?或者Son p=new Son();还能调用更多的方法

2个回答

这里需要扫盲下,OO设计中的一个基本准则:里氏代换原则

里氏代换原则告诉我们,在软件中将一个基类对象替换成它的子类对象,程序将不会产生任何错误和异常,反过来则不成立,如果一个软件实体使用的是一个子类对象的话,那么它不一定能够使用基类对象。例如:我喜欢动物,那我一定喜欢狗,因为狗是动物的子类;但是我喜欢狗,不能据此断定我喜欢动物,因为我并不喜欢老鼠,虽然它也是动物。
例如有两个类,一个类为BaseClass,另一个是SubClass类,并且SubClass类是BaseClass类的子类,那么一个方法如果可以接受一个BaseClass类型的基类对象base的话,如:method1(base),那么它必然可以接受一个BaseClass类型的子类对象sub,method1(sub)能够正常运行。反过来的代换不成立,如一个方法method2接受BaseClass类型的子类对象sub为参数:method2(sub),那么一般而言不可以有method2(base),除非是重载方法。
里氏代换原则是实现开闭原则的重要方式之一,由于使用基类对象的地方都可以使用子类对象,因此在程序中尽量使用基类类型来对对象进行定义,而在运行时再确定其子类类型,用子类对象来替换父类对象。

http://blog.csdn.net/lovelion/article/details/7540445

假如就一个子类或者实现类 而且不需要扩展 那么完全可以把父类或接口干掉
Java里也许最恶心的就是 所有人写东西上来就是一个接口一个实现类 有些场合一点必要都没有 完全是给自己找麻烦

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问
相关内容推荐