2 csdn peter csdn_peter 于 2016.09.08 18:19 提问

子类继承父类 父类调用子类的方法

图片说明

我现在有这几个类,A B1 B2是接口,A是B1 B2的父类,B1 B2是C1 C2父类,
现在我用A a = new C1(); (a as C1).方法1(); 可以调用子类方法。如果父类不转为子类,还有什么方法父类可以访问到子类的方法。

8个回答

Gandalfool
Gandalfool   2016.09.08 18:27
已采纳

不行吧 A指针强行转换成C1类型也只能访问C1中从A里继承来的东西 想访问子类的方法的话 把这个方法定义成虚函数不就可以了么

csdn_peter
csdn_peter 你说的对,其实就是个继承跟重写。
大约一年之前 回复
csdn_peter
csdn_peter 把A转成C1是可以访问C1中的方法的
一年多之前 回复
qq_29594393
qq_29594393   Ds   Rxr 2016.09.08 19:10

首先B1 B2 是接口的话,那么A也是接口,A a =new A();这一句就是错的,无法用new声明一个接口对象

csdn_peter
csdn_peter 我new的是C1
一年多之前 回复
liyantianmin
liyantianmin   2016.09.08 20:57

如果父类不转为子类
这句话是不准确的,这个是多态,实际上a是子类的实例并父类的,父类引用指向子类对象

liyantianmin
liyantianmin 回复csdn_peter: 不知道你的应用场景是什么,继承的目的是方法和属性的传递,下层的东西会比上层的多或者相同,父类是不可能访问当子类方法的
一年多之前 回复
csdn_peter
csdn_peter 父类对象指向子类对象后,有什么方法父类对象能访问到子类方法
一年多之前 回复
wojiushiwo945you
wojiushiwo945you   Ds   Rxr 2016.09.08 21:08

这是不允许的,父类只能调用自己的方法,但是反过来,子类除了可以调用自己的方法,还可以调用继承自父类的方法。

csdn_peter
csdn_peter 没有什么方法了吗?
一年多之前 回复
junbujianwpl
junbujianwpl   2016.09.08 22:54

A a = new C1(); (a as C1).方法1(); 这种情况下的方法调用是可能会失败的 类型转换向上是安全的 向下是不确定的 即会出现失败的情况

感觉楼主的意思可能是重写的含义 如果是java语言的话 所有函数默认是虚函数 在父类中加一个方法 在子类中实现这个方法 用父类的指针指向子类的对象 调用的就是子类的方法 如果是c++ 需要将函数加上virtual修饰关键词 。。。不知道我说清楚没有

waterhexuan
waterhexuan   2016.09.08 23:21

一个对象能调用什么方法取决于它本质是什么 能转化成哪个类的对象说明它本身就是那个类

java__project
java__project   2016.09.09 00:49

这个结构很像“集合”的结构。顶层是Collection接口,然后分为List和Set两个接口,然后List下又有ArrayList,LinkedList和Vector。Set下又有HashSet,TreeSet。
而多态的弊端就是父类不能使用子类特有的方法。强行向下转型,我认为还是子类在用自己的方法。另外不太清楚,是否可以用反射获取到子类的方法

ganyao939543405
ganyao939543405   2016.09.11 10:54

可以明确的告诉你,已经没有办法访问到父类的方法了

ganyao939543405
ganyao939543405 回复OSTCB: 除非在子类内部访问
一年多之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!