2 qq 33891868 qq_33891868 于 2016.02.20 09:58 提问

java多态问题的讨论 谢谢

java多态中 父类的引用指向子类对象 可是如果只是子类的引用指向子类对象 不是也能调用父类、子类的方法吗 为什么要让 父类的引用指向子类对象?

4个回答

wojiushiwo945you
wojiushiwo945you   Ds   Rxr 2016.02.20 14:44

你可以搜一下面向抽象编码这个概念,本质上来说,变量定义的类型是父类类型还是子类类型,只要能满足你的功能需求,都是一样的效果的。
但是,如果编程中,遵循这个原则,将引用变量定义为抽象类型(即父类类型的话),那么你的代码就更容易扩展和维护了。
举个例子,比如你定义了一个UserService 接口类型,它的一种实现类为UserServiceImp,还有UserAction类,它关联一个用户服务类型,如果你定义为抽象类型UserService,那么你的UserAction类中对UserService的操作,只跟这个顶层父类的定义有关,此处并不关心它具体是哪一种子类实现。你可以对UserService有N种实现,然后在自己需要的时候传递任意一种子类类型,但是这个UserAction类不需要作任何改变。
但是如果你在UserAction定义中定义是子类类型,一旦你要变换另一种实现,你这个UserAction中所有用到这个子类类型的地方可能也会根据需求进行修正。面向抽象编程,可以更容易扩展。
常见的就是JDBC对不同数据库的支持,抽象父类包含数据库访问公共的操作,而不同数据库实现又不同,但是引用端只需要引用抽象类型就够了,然后由客户端按自己需求传递对应的子类实现类型。

wojiushiwo945you
wojiushiwo945you   Ds   Rxr 2016.02.20 10:32

这个问题不是提过吗,怎么又提一遍呢?

qq_33891868
qq_33891868 回复毕小宝: 我想知道 父类引用指向子类对象 和 子类引用指向子类对象的区别
接近 2 年之前 回复
u010536377
u010536377   2016.02.20 10:42

比如Parent是父类,那么定义Parent p = new Son()和Son s=new Son()。都是可以的。s是Son类,而p经过强转也会是son类

qq_29427235
qq_29427235 回复qq_33891868: 父类的引用只可以调用父类有的方法吧,如果子类新添加了方法,那么父类是不可以用的吧
接近 2 年之前 回复
qq_33891868
qq_33891868 回复马培文: 那父类引用指向子类对象 和 子类引用指向子类对象有什么区别?
接近 2 年之前 回复
qq_33891868
qq_33891868   2016.02.20 10:49

父类引用指向子类对象和子类引用指向子类对象有什么区别?

ChengKuanChi
ChengKuanChi 如果子类当中有父类当中没有的方法,那父类引用指向子类对象那不就出错了吗
接近 2 年之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!