多态

学习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.父类必须强转子类

你可能感兴趣的:(多态)