C#——向上转型
来源:互联网 发布:百度人工智能有哪些 编辑:程序博客网 时间:2024/05/22 13:47
在学习C#的过程中,一些基础知识比如数据类型、控制结构、数组等都与之前接触的语言大同小异,还能够理解,但是向上转型这个概念还是第一次遇到。
学习了一下后大致理解如下:
向上转型就是将子类转型成父类,对象可以作为它本身的类型使用。
先来看一段代码:
public class Animal { public virtual void Eat() { Console.WriteLine("我是动物,我要吃东西!"); } } public class Bird : Animal { public override void Eat() { Console.WriteLine("我是鸟,我要吃东西!"); } } class Test { static void Main(string[] args) { Animal animal = new Bird(); //向上转型 animal.Eat(); } }
上述例子中我们定义了一个动物类(其中有吃东西的方法),鸟类继承了动物类(重写了基类中吃东西的方法),主函数中生命animal为Animal类型的对象,但运行结果并不是我们预期的那样,而是显示“我是鸟,我要吃东西!”。
对于这个例子。声明animal的时候,animal的类型为Animal。但是animal所指向的实例为Animal的子类即Bird。
当然有向上转型就有向下转型,方式当然也是相反,即将父类转换成子类。
在网上看到一个问题,有人说“如果子类中所需要的功能在父类中存在,就使用向上转型;如果父类所需要的功能在子类中存在,就使用向下转型”,但是如上例所述,Bird是Animal的子类,Bird已经继承了Animal中的方法,为什么还要使用向下转型呢?即为什么定义Animal的时候要用“Animal animal=new Bird();”而不是“Bird animal=new Bird();”呢?
恳请朋友们不吝赐教,提出宝贵的意见和建议。
2 0
- C#——向上转型
- C++:向上转型
- Java多态——向上转型与向下转型
- Java基础——向上转型、向下转型
- java学习——内部类向上转型为接口
- 邂逅java——转型(向上/向下)
- 【J2SE快速进阶】——向上转型及其内存分析
- oop特性——向上转型(番外)
- 关于Java多态——向上向下转型
- 向上转型
- 向上转型
- 向上转型
- 向上转型
- 向上转型
- 向上转型
- 向上转型
- 向上转型
- 向上转型
- AndEngine-GLES2 显示文本信息
- 递归运用--蟠桃记
- 点击背景关闭键盘
- 完美的一天之----聪明的我+险象环生
- iOS开发UITableViewCell的选中时的颜色设置
- C#——向上转型
- 递归方法汉诺塔
- “不给力啊,老湿!”:RSA加密与破解
- html5使用视图块(view blocks)
- POJ 3126 Prime Path(素数,BFS最短路)
- 如何判断当前iOS设备
- sql树形查询
- Android版简历(三)
- C++类的静态数据成员和普通数据成员的区别