多态的学习

来源:互联网 发布:c语言编写程序的步骤 编辑:程序博客网 时间:2024/05/19 02:03
1.多态-隐藏基类方法与多态的实现(*S)
签名不同(重载)
签名相同(隐藏基类方法)


  子类可以重写父类方法
虚方法
重写方法
重写基类方法一样可以调用基类方法
  多态就是对象可以表现多个类型的能力


2.如果子类和父类的方法名重名了,会报绿线,如何把绿线干掉??
第一种方法:可以在子类方法的访问符后面加以new(将父类方法隐藏了)
第二中方法:如果子类中有与父类同名的方法:但子类要调用自己的方法
  就要使父类virtual(虚方法),子类重写父类方法(override)(只有abstract和virtual可以被重写)

虚方法与重写:
1.方法不能用static修饰
2.方法重写于基类的签名必须一致
3.virtual 不能于private一起使用


base fun();的目的主要是添加逻辑

常见虚方法:Equal();ToString();GetHashCode();


重写的时候注意:签名都一样(签名包括参数(包括数量,顺序,参数类型不包括修饰符))与返回值无关


额外知识点:
overload:重载指的是同一个类中有两个或多个名字相同但是参数不同的方法,(注:返回值不能区别函数是否重载),重载没有关键字。


override:过载也称重写是指子类对父类中虚函数或抽象函数的“覆盖”(这也就是有些书将过载翻译为覆盖的原因),但是这种“覆盖”和用new关键字来覆盖是有区别的。


new:覆盖指的是不同类中(基类或派生类)有两个或多个返回类型、方法名、参数都相同,但是方法体不同的方法。


但是这种覆盖是一种表面上的覆盖,所以也叫隐藏,被覆盖的父类方法是可以调用得到的。
重载覆盖的发生条件:
重载,必然发生在一个类中,函数名相同,参数类型或者顺序不同构成重载,与返回类型无关
重写,必然发生在基类和派生类中,其类函数用virtual修饰,派生类用override修饰
覆盖,在子类中写一个和基类一样名字(参数不同也算)的非虚函数,会让基类中的函数被隐藏,编译后会提示要求使用New关键字


重写(有虚方法或者抽象方法时使用)与new(没有抽象方法或虚方法时)的时候:只有方法体不同,其它的参数包括访问类型返回值


重载于重写都于修饰符无关


new是覆盖(就是子类于父类中相同的部分)
override是直接都是自己的东西了


注意:看懂了与会写了差十万八千里













原创粉丝点击