博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
04封装 里氏转换 多态
阅读量:6941 次
发布时间:2019-06-27

本文共 2376 字,大约阅读时间需要 7 分钟。

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

你可能感兴趣的文章
linux下命令行的查找顺序
查看>>
基于HTML5 Canvas 点击添加 2D 3D 机柜模型
查看>>
详述 SQL 中的 distinct 和 row_number() over() 的区别及用法
查看>>
xshell 登陆堡垒机实现自动跳转
查看>>
Hexo-设置阅读全文
查看>>
实模式与保护模式
查看>>
分布式ID生成器解决方案
查看>>
ResolveUrl in external JavaScript file in asp.net project
查看>>
EL表达式JSON应用
查看>>
人民邮电出版社图灵公司征求《Windows Communication Foundation Unleashed》译者
查看>>
使用pidstat查看进程资源使用情况
查看>>
PatternsInJava文摘
查看>>
理解SVN关键词BASE,HEAD,COMMITTED,PREV
查看>>
AOP 实现的原理简析
查看>>
linux命令汇总1
查看>>
PHP 初学
查看>>
I.MX6 U-boot编译找不到用户目录
查看>>
date 修改系统时间
查看>>
python coroutine的学习跟总结[转]
查看>>
String 的扩展方法
查看>>