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币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
java中多态的经典问题分析
Questionpackage demo;/** * Created by zwj on 2016/3/26. */ class A { public String show(D obj) { return ("A and D"); } public String show(A obj) { return ("A and A"); }
java多态简单例子 one
/* 对象的多态性:动物 x = new 猫(); 函数的多态性:函数重载、重写 1、多态的体现 父类的引用指向了自己的子类对象 父类的引用也可以接收自己的对象 2、多态的前提 必须是类与类之间只有关系,要么继承或实现
java中多态的this指向问题
存在多态的条件,满足3个条件,1.要有继承2.要有重写方法,3父类引用子类对象eg:上面的Servlet s = new MyServlet();。满足多态this指向最终MyServlet类的对象。 不满足多态this指向调用当前方法的对象,实际上每个方法都有两个隐式参数this和super。
Java多态 向上转型 向下转型
封装、继承、多态是面向对象的三大特征,在Java中什么是多态? Java引用变量有两种类型,分别是编译时类型和运行时类型。何为编译时类型,编译时类型就是由声明该变量时使用的类型决定,而运行时类型是由实际赋给该变量的对象决定 的,也就是说如果编译时类型和运行时类型不一致时,就可能出现上面提到的多态。 我们看下下面的程序: [
关于java的多态方法调用顺序的问题
使用父类类型的引用指向子类的对象,该引用调用的师父类中定义的方法和变量,变量不能被重写(覆盖);如果子类中重写了父类中的一个方法,那么在调用这个方法的时候,将会调用子类中的这个方法;          注意特殊情况,如果该父类引用所调用的方法参数列表未定义,就调用该父类的父类中查找,如果还没找到就强制向上类型转换参数列表中的参数类型,具体优先级高到低依次如下: this.show(O)、sup
[技术讨论]讨论问题的两个基本原则
经常收到一些朋友发来的消息,问我能否向我问一些问题,有些直接告诉我说,是工作上的问题。今天又一个朋友从csdn发来了消息,消息如下: 内容 青润:你好.工作中有一些问题无从下手,向请求你的帮助。不知道是否可以。是关于产品开发方面的问题。 我的回答是:我回答问
如何与领导讨论问题(转)
领导与下属之间,在一些大的、原则性的问题上,还是需要争论的。争论的结果,可使事情得到正确解决,对事业、对领导都有益处。   正确的争论应做到以下几点:   1、问题是重要的   前边已经说过,小的、非原则性问题的争论,要回避,但不等于问题都不争论。你明明看到领导的意见不对而不争论,当严重后果发生后,领导也会说你是不行的,要么,为什么你没有发现和及时提醒?   2、争论一定要有准备   领导的主张,
java多态
java多态
Java多态中的引用类型转换理解模型
在我已经掌握的知识中,能够拿来类比的只有强制数据类型转换。不过,看完了慕课网的教程之后感觉两个东西很不一样。根据视频教程中的讲解,我得出一个结论:引用类的强制类型转换要么是信息全都减少的转换,要么是全都增加的转换,不能够既增加又减少。这似乎符合课程中给出的代码例子的执行表现。不过,我自己尝试写代码的时候发现这个结论还是错的。没办法,只能够多尝试一下,在探索中前进了。 测试1: 测试代码如下:
java多态向上、向下转型问题
向上转型  假定父类为动物,子类为狗,父类有一个方法发声(),狗继承并覆盖了一个发声方法。           在子类重写该方法  则:动物 a=new 狗();//这就为向上转型a.发声();  在调用 a.发声();时调用的是狗的发声()也可调动物类其他方法 但不能调用狗类方法  向上转型都会成功,是安全的。 就像说狗是动物没问题。 向下转型  若修改为动物 a=new 狗()