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

图片说明

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

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

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

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

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

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

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

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

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

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