using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;namespace _04封装
{class Program{static void Main(string[] args){//封装的作用:1.减少了大量的冗余代码//            2.将一堆难以理解的功能封装起来,但对外提供了一个简单的使用接口,属性封装的是字段//继承的作用:1.减少了类中的冗余代码//            2.让类与类之间产生了关系,为多态打下了基础,多态中把子类赋值给父类//继承的特性:1.单根性:一个子类只能有一个父类//            2.传递性:爷爷类 父类 子类 往下继承//            3.里氏转换:子类可以赋值给父类,如果父类中装的是子类对象,则可以将这个父类转换为对应子类对象//子类赋值给父类,person只能调出父类的对象Person person = new Student();//里氏转换  is  as : 如果要调出子类对象,需要使用下面关键字,不会抛出异常//强制转换,语法没错,继承出错,抛出异常//Teacher t = (Teacher)person;//t.TeacherSay();// is:返回bool类型,指示是否可以转换// as:如果转换成功,则返回对象,否则返回null//if (person is Teacher)//{//    ((Teacher)person).TeacherSay();//}//else//{//    Console.WriteLine("转换失败");//}
Student s = person as Student;//将person转换成student对象if (s !=null){s.StudentSay();}//为什么要用里氏转换:可以把十个子类都赋值给父类,把子类对象当作父类来看。针对父类进行编程,写出通用代码,适应需求的变化,这个也是多态的作用。//多态的作用:1.虚方法    virtual overwrite//            2.抽象类    abstract overwrite//            3.接口      interface// 多态就是指不同对象(对象之间可以有关系--虚函数、抽象类来实现多态,也可以没有关系--使用接口实现多态)收到相同消息时,会产生不同行为,同一个类在不同场合下表现不同的行为特征(父类可以调用不同子类的函数)。// 多态的作用:把不同的子类对象都当作父类来看,可以屏蔽不同子类对象之间的差异,可写出通用代码,适应需求的变化。// private 当前类中访问,默认修饰符// protected 类及子类访问,继承中使用// internal 当前程序集中使用// protected internal 当前程序集或子类中,或不同程序集中// public 任何地方
Console.ReadKey();}//里氏转换:子类可以赋值给父类class Person{public void PersonSay(){Console.WriteLine("我是父类");}}class Student : Person{public void StudentSay(){Console.WriteLine("我是学生");}}class Teacher :Person{public void TeacherSay(){Console.WriteLine("我是老师");}}}
}

转载于:https://www.cnblogs.com/andu/p/6132930.html

04封装 里氏转换 多态相关推荐

  1. C#里氏转换,子类赋值父类,父类强制转换成子类的理解

    C#里氏转换,子类赋值父类,父类强制转换成子类的理解 最近在学习C#,在父类和子类的学习上有不理解的地方. Father f = new Son(); 这样的一个实例化程序中,内存时怎么样处理的,为什 ...

  2. 黑马程序员--里氏转换

    ---------------------- ASP.Net+Android+IOS开发 .Net培训期待与您交流! ---------------------- ?如果有一个非静态类,当我们在线程栈 ...

  3. python中字符串的使用04字符串大小写转换、删除空白字符

    python中字符串的使用04字符串大小写转换.删除空白字符 1.字符串的大小写转换 字符串的大小写转换就是将大写字母改为小写字母或者将小写字母改为大写字母.python中字符串大小写转换的方法有:用 ...

  4. C# 里氏转换(父类转换成子类)( is as )

    里氏转换: 1.子类可以赋值给父类 2.如果父类中装的是子类对象,则可以将这个父类转换为对应的子类对象 ---->关键字 1.is:返回bool类型,指示是否可以做这个转换 2.as:如果转换成 ...

  5. java 封装 继承和多态

    2019独角兽企业重金招聘Python工程师标准>>> 多态无处不在.引用的概念最为困难.理解了引用才能理解多态的意义以及应用. 多态的应用的一大前提是继承.以及继承中的重写方法.继 ...

  6. 封装时间转换工具类_利用swig封装C++的dll为C#方便使用

    使用C++开发界面,时间效率上来说,不如C#开发的快和方便.但是CTP的库是C++的,并没有C#的库,网上也有人用C#的PINVOKE的方式将C++的函数一个个转换为C#能用的接口,我是看了下,原理o ...

  7. 面向对象 详解笔记 方法 类 对象 封装 继承 重写 多态 接口

    文章目录 面向过程&面向对象 面向过程 面向对象 什么是面向对象 回顾方法及加深 方法的定义 修饰符 返回类型 break:跳出switch,结束循环和return的区别 方法名:注意规范就o ...

  8. UML2面向对象分析与设计 -- 面向对象思维(概念、面向对象技术的发展历史、对象和类、面向对象技术的相关原则:抽象 封装 分解 泛化 多态 分层 复用)

    文章目录 1. UML2面向对象分析与设计 学习目标 2. 面向对象思维 2.1 学习目标 2.2 什么是面向对象 2.3 面向对象技术的发展历史 2.4 面向对象技术的优势 2.4.1 便于沟通:在 ...

  9. 百无聊赖之JavaEE从入门到放弃(九)封装详解 多态详解

    目录 一.封装 1.封装的作用和含义 2.编程中封装的具体优点: 3.封装的实现一使用访问控制符 4.关于protected的两个细节: 5.开发中封装的简单规则 6.javaBean 二.多态(po ...

最新文章

  1. list of Java class file format major version numbers?
  2. python中utf-8是什么意思_python中Unicode和UTF-8的区别
  3. fedora16配制
  4. macpro台式计算机,Mac Pro正式上架 真的可以用来刨土豆丝
  5. JavaScript的DOM编程总结
  6. 3 css 奖品出现弹出动画_基于jquery css3实现点击动画弹出表单源码特效
  7. 范数与L1损失(MAE)、L2损失(MSE)的关系
  8. IT人必去的几大网站,国内外知名IT网站罗列!
  9. Categories
  10. Unity-MD5加密
  11. python使用selenium大麦网抢票
  12. 2019_GDUT_新生专题I选集 L Codeforces-1260B
  13. 苹果电脑如何正确断网?Mac电脑断网方法
  14. linux yum安装xz,CentOS 7 上安装 xz utils 解压缩工具
  15. Can‘t reconnect until invalid transaction is rolled back
  16. 表的创建(create),修改(alter)和删除(drop)
  17. 瑞思拜 我儿豁 SpringMVC基础 兄弟们冲冲冲
  18. 新的一天,加油努力!
  19. Empirical Covariance 经验协方差 sklearn
  20. python gui 三维 pyqt5_【PyQt5-Qt Designer】在GUI中使用pyqtgraph绘图库

热门文章

  1. 嵌入式开发笔记-存储控制器
  2. java panel 显示文字,从动态添加的jPanel获取文本
  3. 17.04安装mysql_【17-04-11】 【求助】在线安装mysql时出现问题
  4. matlab--曲线拟合
  5. 【FPGA】ODDR使用研究记录
  6. 如何使用RS-232发射器和接收器?
  7. 数字集成电路的层次关系
  8. Cordic算法——圆周系统之向量模式
  9. 【 FPGA 】门控时钟专题
  10. 【 English 】与个人品质有关的英语词汇