学习oop多态
1.方法重载
2.方法重写
3.里氏替换原则
方法重载是在指同一类中相同方法的不同行为.
方法重载:构造函数就属于特殊的方法重载.
方法重载的特点:
1.方法名必须相同.
2.参数列表必须不相同(这里的不相同是参数类型,参数个数,以及参数顺序)
3.在有相同参数列表个数的前提下,方法返回值不作为判断方法是否重载的依据.
重写与覆盖的区别:

覆盖:在子类中用 new 关键字修饰 定义的与父类中同名的方法,叫覆盖。
总结
1:不管是重写还是覆盖都不会影响父类自身的功能(废话,肯定的嘛,除非代码被改)。
2:当用子类创建父类的时候,如 C1 c3 =newC2(),重写会改变父类的功能,即调用子类的功能;而覆盖不会,仍然调用父类功能。
3:虚方法、实方法都可以被覆盖(new),抽象方法,接口 不可以。
4:抽象方法,接口,标记为virtual的方法可以被重写(override),实方法不可以。
5:重写使用的频率比较高,实现多态;覆盖用的频率比较低,用于对以前无法修改的类进行继承的时候。
方法的重写:是指在继承关系中不同类之间方法之间的比较和研究
第一个关键字:virtual (虚)
用virtual修饰的方法称之为虚方法.
virtual一般情况下和override需要成对出现.
如果子类重写使用了override,则父类必须拥有virtual修饰的方法
反过来不一定成立,因为我们还有方法覆盖
第二个关键字:override (重写)
为什么要使用方法重写呢?
1.使用虚方法其实就是对目前的程序不是很满意,暂时方法功能是实现的,希望后面
的程序员通过重写父类方法的方式,进行功能上的优化.
2.可以通过继承系统提供的类,去修改系统类中提供的虚方法.
方法重写需要注意的地方:
1.不能重写父类中用sealed修饰的方法.
2.不能重写父类中用static修饰的方法.
3.如果父类中存在abstract方法,子类必须重写.
LSP(里氏替换原则):
原则上讲子类对象介绍给父类对象,也可以说子类替换父类,并且出现在父类能够出现的任何地方
反过来说,父类对象是不能替换子类对象的,这种特性称为里氏替换原则
1.子类可以隐式的转为父类
2.父类必须强转子类
网友评论