强制类型转换和多态的问题

HC_LOOK 2012-05-28 05:11:00
多态:
父类:A,子类:b
A a = new b();
a.方法;

强制类型转换:
b a = new b();
(A)a.方法;

项目中一个例子
父类:formBase(基窗体)
子类:基于父类的各个子窗体

Form frm = this.ActiveMdiChild;
fromBase(frm).方法();

想问一下,通过强制类型转换,把子类转换为父类,然后调用方法实现多态,和正常的多态,有区别吗?
...全文
415 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
jinghe20 2012-05-28
  • 打赏
  • 举报
回复
往往子类是父类的扩展,就是说父类有的方法,子类都有,子类有的方法父类不一定有(指公开可以调用的方法)

强制转换,父类转换成子类就是为了调用子类没有的方法。子类强制转换成父类,好像很少见。
HC_LOOK 2012-05-28
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 的回复:]

转为父类,执行的就是父类的方法了,这样转型很危险,如果父类不存在子类的方法,就会出错
[/Quote]

如果父类中不存在子类的方法,那么用多态的方式做:
A a = new b();
a.方法;
不也会出错吗?
__天涯寻梦 2012-05-28
  • 打赏
  • 举报
回复
另外如果父类没那个方法,那就不是多态了,而且编译时就会有提示。
__天涯寻梦 2012-05-28
  • 打赏
  • 举报
回复
A a = new b() 也有隐式类型转换,(A)a 只是把类型转换显式了,两者没有区别。
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 的回复:]

转为父类,执行的就是父类的方法了,这样转型很危险,如果父类不存在子类的方法,就会出错
[/Quote]

支持楼上
bdmh 2012-05-28
  • 打赏
  • 举报
回复
转为父类,执行的就是父类的方法了,这样转型很危险,如果父类不存在子类的方法,就会出错

111,126

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Creator Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧