C#向上转型与向下转型
来源:互联网 发布:适用于编程的字体 编辑:程序博客网 时间:2024/06/06 20:12
向上转型与向下转型
向上转型:将子类对象转为父类对象。此处父类对象可以是接口。
向下转型:把父类对象转为子类对象。
讨论两种继承:继承自抽象类、继承自非抽象类(这两种继承所对应的转型稍有不同)
继承自非抽象类
父类:动物类Animal(有一个叫声方法“call()”)
class Animal { public void call() { Console.WriteLine("无声的叫唤"); } }
子类:狗类Dog(继承于“动物类”,覆盖父类“call()”方法,扩展嗅觉灵敏“ smell()”方法)
class Dog : Animal { // new的作用是隐藏父类的同名方法 public new void call() { Console.WriteLine("叫声:汪~汪~汪~"); } public void smell() { Console.WriteLine("嗅觉相当不错!"); } }
向上转型:将子类对象转为父类对象。此处父类对象可以是接口。
转化后的父类对象具有父类所有方法,若方法被子类重写override,那么实际调用时,调用的是重写后的实现。同时支持子类到父类的强转。特注:但不能调用子类扩展方法(父类不具有的方法)。
Animal animal = new Dog(); //向上转型① animal.call(); //打印出“无声的叫唤”,调用的是父类本身的call方法。 // animal.smell(); //出错,不存在此方法。
目前看来,感觉animal跟Dog一点关系也没有。但请继续往下看
向下转型:把父类对象转为子类对象。
经②转化后的子类对象,跟一般的继承子类对象一样。具有子类所有方法(包括重写方法)+父类所有方法(被重写的方法,按重写的算。)
例:
Dog dog = (Dog)animal; //向下转型②dog.call(); //打印出“叫声:汪~汪~汪~”,即调用的是Dog类的call方法。dog.smell(); //打印出“嗅觉相当不错!”,即子类方法可用。
特注:若Animal animal = new Dog()改成Animal animal = new Animal(),那么Dog dog = (Dog)animal ③ 将不被支持,而出错。这是相当于用父类来替换子类,因为子类具有扩展,父类不能做到完全替代。
// Dog dog2 = new Animal(); //编译都无法通过,报错“存在一个显示转换”// Dog dog3 =(Dog)new Animal(); //运行报错,报错“无法将Animal类型转化为Dog类型”<span style="font-size:18px;">s④</span>
③与④类同。
Animal animal = new Dog()好似给animal声明了一个大的空间(放置Dog的空间),用的时候,允许有空隙;同等大小的内容(Dog对象)刚好容纳,很贴身;小一些的内容(Animal对象)放到里面,虽有空隙,但是没问题的。
继承自抽象类
父类:动物类Animal_a(有一个叫声方法“call()”)
abstract class Animal_a { public abstract void call(); }
子类:狗类Dog_a(继承于“动物类”,实现父类“call()”方法,扩展嗅觉灵敏“ smell()”方法)
class Dog_a : Animal_a { public override void call() { Console.WriteLine("叫声:汪~汪~汪~"); } public void smell() { Console.WriteLine( "嗅觉相当不错!"); } }
这里是一般的继承知识:
Animal_a animal_a = new Dog_a(); //向上转型animal_a.call(); //打印出“叫声:汪~汪~汪~”// animal_a.smell(); //不存在此方法
子类实现抽象类,调用方法时,自动找到子类同名方法,执行子类同名方法。向上转型时,转型后的对象只具有父类方法和子类对父类重新(实现)的方法。
总结:
向上转型是自由的;向下转型是有约束条件的。
非抽象继承,子类对象、父类对象的方法都能调到(用子类对象能调到子类对象的方法,用父类对象能调用父类对象的方法)。
0 0
- C#向上转型与向下转型
- 向上转型与向下转型
- 向上转型与向下转型
- 向上转型与向下转型
- C# 装箱,拆箱,向上转型,向下转型
- 向上转型 向下转型
- 向上转型、向下转型
- 向上转型,向下转型
- 向上转型、向下转型
- 向上转型向下转型
- Java向上转型与向下转型
- JAVA中的向上转型与向下转型
- Java向上转型与向下转型(good)
- Java向上转型与向下转型
- Java向上转型与向下转型
- 对象向上转型与向下转型
- JAVA中的向上转型与向下转型
- JAVA中的向上转型与向下转型
- php 在线人数,今日访问量,总访问量统计
- linux shell 处理unixtime
- 数据库连接池(数据源)1
- Sql Server Cpu 100% 的常见原因及优化
- Linux里设置环境变量的方法(export PATH)
- C#向上转型与向下转型
- list-each-while遍历数组 和使用foreach的对比
- A+B for Input-Output Practice (I)
- 保护视力,从改变eclipse编辑器样式风格做起
- 三维排序(将书以Name、Year、Price进行排序
- hdu1241 Oil Deposits
- SPSS 文本值在当前服务器区域不可映射解决办法
- bsh(BeanShell)动态执行java代码
- crontab设置脚本环境变量