A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 乔克 黑马帝   /  2011-11-29 16:08  /  3362 人查看  /  7 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

什么叫多态? 大家给个例子  帮我解释一下啊{:2_39:}

7 个回复

倒序浏览
朱勋 黑马帝 2011-11-29 16:12:14
沙发
前面有好几个人都问过了,自己找下吧
回复 使用道具 举报
多态就是相同的方法根据对象的不同引用而产生不同的结果
C#多态性分为两种,一种是编译时的多态性,一种是运行时的多态性。

编译时的多态性:编译时的多态性是通过重载来实现的。对于非虚的成员来说,系统在编译时,根据传递的参数、返回的类型等信息决定实现何种操作。

运行时的多态性:运行时的多态性就是指直到系统运行时,才根据实际情况决定实现何种操作。C#中运行时的多态性是通过覆写虚成员实现。

评分

参与人数 1技术分 +1 收起 理由
朱勋 + 1

查看全部评分

回复 使用道具 举报
同一操作作用于不同的对象,可以有不同的解释,产生不同的执行结果,这就是多态性。
实现多态的方法挺多,现在水平不够啊。
我理解的:
public class DrawingObject
{
public virtual void Draw()
{
Console.WriteLine("I'm 父类");
}
}
public class Line : DrawingObject
{
public override void Draw()
{
Console.WriteLine("I'm 子类,线");
}
}
public class Circle : DrawingObject
{
public override void Draw()
{
Console.WriteLine("I'm 子类,圆");
}
}
using System;
public class DrawDemo
{
public static int Main(string[] args)
{
DrawingObject[] dObj = new DrawingObject[3];
dObj[0] = new Line();
dObj[1] = new Circle();
dObj[2] = new DrawingObject();
foreach (DrawingObject drawObj in dObj)
{
drawObj.Draw();
}
return 0;
}
}


评分

参与人数 1技术分 +1 收起 理由
朱勋 + 1

查看全部评分

回复 使用道具 举报
本帖最后由 何建华 于 2011-11-29 21:01 编辑

说实话多态我还不怎么理解,这是我看的一帖子的解释,比较通俗,对你应该有用:
如果要求3种人——孩子,运动员,音乐演奏者都执行一个动作“play”,会发生什么情况呢?
孩子会出去玩耍。
运动员会比赛。
演员开始演奏。
对于同一个命令,不同的人会有不同的反应,执行不同的动作,这就是生活中一个多态。

一个方法有多种执行

同一操作作用于不同的对象,可以有不同的解释,产生不同的执行结果,这就是多态性。

评分

参与人数 1技术分 +1 收起 理由
朱勋 + 1

查看全部评分

回复 使用道具 举报
张彪 黑马帝 2011-11-30 08:52:15
地板
多态性是指允许不同类的对象对同一消息作出的响应。比如同样的加法,把两个时间加在一起和把两个整数加在一起肯定完全不同。又如同样的选择编辑—粘贴操作,在字处理程序和绘图程序中有不同的效果。多态性语言具有灵活、抽象、行为共享、代码共享的优势,很好的解决了应用程序函数同名问题。

评分

参与人数 1技术分 +1 收起 理由
朱勋 + 1

查看全部评分

回复 使用道具 举报
谭显锋 黑马帝 2011-11-30 09:44:08
7#
说简单点,C#中的多态,一个体现在重载,一个体现在重写(即override一个方法或者属性)。

评分

参与人数 1技术分 +1 收起 理由
朱勋 + 1

查看全部评分

回复 使用道具 举报
王绚文 黑马帝 2011-11-30 11:08:50
8#
最简单的解释: 一个父类对象指向一个子类对象 调用父类对象的方法 而这个方法指向子类的方法!

评分

参与人数 1技术分 +1 收起 理由
朱勋 + 1

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马