1.9 C# 面向对象的三大特性--多态

来源:互联网 发布:python中函数传参数 编辑:程序博客网 时间:2024/05/22 10:48
day 9 面向对象的三大特性--多态

1,方法重载
--->同一个方法但是不同的行为,参数不同这一特性称之为方法重载
构造函数就是方法重载
--->方法重载的特点:
1,方法名必须相同.
2,参数列表不可以相同.
3,如果参数列表相同,那么判断方法重载时就看参数的类型
或者参数的顺序.
4,函数返回值类型不构成判断方法重载的依据
5,必须是同一个类中的同一个方法的不同实现
2,方法重写
--->方法重写的特点
1,必须是父子关系
2,需要被重写的方法前面要被申明虚(virtual)方法
3,子类重写父类的虚方法要使用override
4,一般情况下virtual要与override需要成对儿出现
5,虚方法可能会被重写(就是子类可以用override也可以不用)
6,子类重写了父类方法,那么父类中的方法一定是虚方法
--->方法重写的使用场景
1,多个子类对同一个行为表现出不同的状态时,此时应该用重写.
2,虚方法实际上功能已经实现,但是呢,又不是实现的很好.通过
重写去完善功能.
--->方法重写需要注意的地方
1,子类不能重写父类用sealed修饰的方法
2,子类不能重写父类用static修饰的方法
3,如果父类中有abstract修饰的方法,子类必须重写.
3,里氏替换原则
--->LSP:原则上来说子类对象可以赋值给父类对象,也可以
说子类替换父类,并且能够出现在任何父类出现的
地方,反过来说父类对象不能直接替换子类对象,这
种特性称之为里氏替换原则.
1,子类可以隐式转换为父类
2,父类必须强转子类(强转只是改变类型不能改变指针所指向的内存((变量类型)))

--->is和as
as;(对象类型)关键字的含义是转换,但是一旦转换失败后,
系统会默认给一个null值,程序不会报错
A as B ? B的类型:null;
is:询问的意思
A is B?
is作为判断A是不是B类型
或者A是不是B类型的子类.
引用类型调用方法方法:
/*
* 在调用一个对象的方法时,会检查这个对象a的类型,
* 首先找到堆中的类型对象指针,
* 通过指针找到对象a,查看其是否有该方法.
* 如果没有,则通过类型对象的类型对象指针向上查找
* 直到找到该方法为止,然后检查该方法是否为虚方法,
* 如果非虚方法直接调用,如果该方法为虚方法,即有
* virtual修饰的方法,则根据变量a,去找对象的实例,
* 查找该方法是否被重写过,如果有,执行.
* 没有则继续向上查找.
*/

原创粉丝点击