面向对象、委托事件、序列化反序列化学习笔记

面向对象编程的特性

  1 封装  数据安全;内部修改保持稳定;提供重用性;分工合作,职责分明,方便构建大型复杂系统

  2 继承  去掉重复代码;可以实现多态,侵入性很强的类关系(基类有什么,子类就必须拥有)

  3 多态  相同的变量 相同的操作,但是不同的实现,比如重载,接口的实现,抽象类的实现,重写虚方法和抽象方法等

  4 抽象

一切父类出现的地方都可以用子类代替的

实例化的子类可以返回给父类型的变量,但是父类型的这个变量在编译的时候不能访问子类里自有的成员,这个是属于编译器的限制,实际上在运行的时候这个子类实例是可以访问到自有的成员属性和行为方法的,可以通过 dynamic 动态类型来接受子类的实例化。因为这个可以避开编译器的检查的

面向对象、委托事件、序列化反序列化学习笔记

面向对象、委托事件、序列化反序列化学习笔记


抽象类和接口相同点和区别

//  接口:  只能约束          多实现更灵活    can do(定义规范,继承该接口的必须要承担某些义务)

  //抽象类:  可以完成通用实现  只能单继承      is a (定义规范,继承者具有基类的一切属性和行为,可以通过重写覆写抽象方法和虚方法来实现多态)

  子类都一样的,放在父类;子类都有但是不同,抽象一下(比如说通过虚方法或者是抽象方法,子类通过重写方法来实现抽象即可);有的有有的没,那就是接口


比如说 门:材质 猫眼 门铃 开门(),关门(),报警()

  材质属性和开门、关门的方法是具有代表性的,所以定义在抽象类里,方法可以定义为虚方法,子类视情况来覆写方法

   猫眼、门铃属性和报警方法只有高级一些的门才有,不具有代表性,而且这三个其他的对象也可能会有,所以定义为接              

   口比较合适

接口和抽象类都不可以直接实例化,抽象类只能实例化派生类,而接口不能实例化

抽象类只能被单继承,接口可以继承多个

如果方法只是作为一个工具方法,比如校验方法、计算方法等不需要扩展的,可以用静态方法,其余的能用普通方法就用普通方法

面向对象、委托事件、序列化反序列化学习笔记



抽象方法和虚方法的区别


 抽象方法必须定义在抽象类里,而虚方法不一定,在普通类里也可以定义虚方法

 抽象方法必须要被子类给实现(和接口定义的方法类似),而虚方法不需要子类必须重写

 抽象方法不提供实现方法体,而虚方法必须提供实现

面向对象、委托事件、序列化反序列化学习笔记



抽象方法或虚方法上面加sealed 关键字,限制该方法不允许再被孙子类重写或写

面向对象、委托事件、序列化反序列化学习笔记


面向对象、委托事件、序列化反序列化学习笔记

欢迎分享,(联系QQ/微信:1379998143)

评论