面向对象封装继承多态
面向对象
OOP三个特点:继承 封装 多态
面线对象,面向世间万物,面向各种业务结构。
封装
封装就是对一些事物行为属性的私有隐藏 共有展示,细节隐藏 功能展示。保护细节 私有成员,实现功能模块化。
子类可以用于父类一切的属性和行为。任何父类出现的地方子类都可以替代。
封装变化,降低耦合,软件实体扩展,而不是修改,也就是开放闭合原则。
继承
1、提高代码的重用性,以及代码结构性。
继承之后将会拥有父类的行为和属性(在可见范围之内),更加符合客观世界规律。
里氏替换原则:所有父类出现的地方都可以无缝的用子类替换。
2、this 继承的时候在子类中,指当前类
base 继承的时候在子类中,指父类
3、new(属性 方法)
子类同名方法属性会隐藏父类的同名方法属性,如果不写new修饰符会提示如下警告
警告 CS0108 “Teacher.CreateID2”隐藏继承的成员“People.CreateID2”。如果是有意隐藏,请使用关键字 new。 MyAbsInt E:\Progect\C#\MyAbsInt\MyAbsInt\Entity\Teacher.cs 17 活动。
注意这个只是警告。即使不加new他也会隐藏的。
4、object是一切类型的父类。
子类继承父类的属性 方法,任何父类出现的地方都可以用子类替代
5、C# 语言中是单继承,但是接口可以多继承(一直想不明白为啥单继承,一个人还有爸爸妈妈呢,对于单继我的个人理解:也可能是考虑到最原始的单细胞生物,一个变两个这种繁殖方式。单细胞生物还可以进化为多细胞,高级动植物。)
6、OO开发范式大致为:划分对象→抽象类→将类组织成为层次化结构(继承和合成) →用类与实例进行设计和实现几个阶段。
7、关于抽象,C#中关键字abstract,抽象类不能被实例化,只能被继承。但是抽象类可以继承class interface abstract类型。
8、关于接口,记得上学的时候老师说,默认的认为接口是抽象的,接口里面的方法是公共 抽象的,所以接口方法不加public。其实编译为中间语言他就是这样的(但是还加的有别的修饰)。
9、虚方法,是有实现体的方法(抽象方法是没有的),子类如果有相同的方法 可以使用override或者new修饰符修饰。 override会覆盖父类方法,把父类赋给父类,父类表现的是子类的方法(这个是多态) new则是隐藏父类成员
10,、覆盖(覆写)与重载(重写):方法重载就是方法名字一样参数不一样和返回值没有关系。(如果参数一样,方法名字一样。但是返回值不一样,编译器认为是同一个函数 提示报错)
多态
同一方法在不同类型对象(同一父类)中表现不同行为。
就是要通过覆盖override,能用覆盖的有抽象方法 虚方法 接口。但是最好用抽象类,