文章目录
面向对象基本知识点
的生动讲解
A2、类与实例
一切事物皆为对象(类的实例)
类是具有相同的属性和功能的对象的抽象描述
类名称首字母需要大写
,多个单词的类名称则各个字母大写
实例化
是通过类创建对象的过程
A3、构造方法
和C++中的构造函数
一样
A4、函数重载
函数重载
提供了创建多个同名函数的能力,但这些函数需要使用不同类型的参数(参数的类型或个数必须有所不同)
函数重载
可在不改变原方法的基础上,新增功能
A5、属性与修饰符
私有的变量叫字段
;公有的变量是属性
(这里的书写语法与C++不同,理解起来也不同)
C#里面的修饰符
只是C++中修饰符
的一部分
A6、封装
代码有大量重复不会是什么好事情
面向对象的三大特性
:
- 1、
封装
: - 2、
继承
: - 3、
多态
:
每个对象都包含它能进行操作所需要的所有信息,这个特性称为封装
,因此对象不必依赖其他对象来完成自己的操作
封装的好处:
- 1、良好的封装能够
减少耦合
- 2、
类内部的实现
可以自由地更改 - 3、类具有
清晰的对外接口
A7、继承
类的继承
代表了一种is-a
的关系
- 1、子类拥有父类
非private的属性和方法
- 2、子类具有
自己特有的
属性和方法 - 3、子类可以对
父类的虚函数
进行重写
子类从父类中继承的成员有方法、域、属性、事件、索引指示器
;但对于构造函数,其不能被子类继承,只能被子类调用
继承是一种类与类之间的强耦合关系
has-a关系
A8、多态
多态
表示不同的对象可以执行相同的动作,但是动作的不同细节是通过它们自己的实现代码来执行的
多态的原理
是当方法被调用时,无论对象是否被转换为其父类,都只有位于当前对象继承链最末端的方法实现
会被调用
虚函数
是按照其运行时类型
而非编译时类型
进行动态绑定调用的
没有学过设计模式,那么对多态、乃至对面向对象的理解多半都是肤浅和片面的
A9、重构
通过更改代码的结构来优化代码的结构
(减少代码的重复量只是其中的一小部分)
A10、抽象类
- 1、
抽象基类
不能实例化 - 2、
纯虚函数
必须被子类重写(如果该子类想实例化对象的话) - 3、如果类中包含
纯虚函数
,那么类就必须定义为抽象基类
,无论是否还包含其他一般的函数
在一个以继承关系形成的等级结构里面,树叶节点
应当是具体类
,而树枝节点
均应当是抽象基类
具体类不是用来被继承的
(被继承的类均应该是抽象基类),这是编程设计者应该努力做到的一点
A11、接口
接口
是把隐式公共方法和属性组合起来,以封装特定功能的一个集合
一旦类实现了接口,类就可以支持接口所指定的所有属性和成员。实现接口的类必须要实现接口中的所有方法和属性(类实现接口
)
声明接口
在语法上与声明抽象类完全相同,但不允许提供接口中任何成员的执行方式
一个类可以支持多个接口,多个类也可以支持相同的接口
。接口的命名,前面要加一个大写字母I
不论是接口、抽象基类、类甚至对象,都是在不同层次、不同角度进行抽象的结果,它们的共性就是抽象
抽象基类和接口的异同点:
- 1、类是对对象的抽象;抽象基类是对类的抽象;
接口是对行为的抽象
- 2、如果行为跨越不同类的对象,可使用
接口
;对于一些相似的类对象,用继承抽象基类
- 3、从设计角度讲,
抽象基类
是从子类中发现了公共的东西,泛化出父类,然后子类继承父类;而接口
是根本不知道子类的存在,方法如何实现还不确认,预先定义
实现接口和继承抽象基类并不冲突
抽象基类是自底而上抽象
出来的,而接口则是自顶向下设计
出来的
.NET Framework中的继承功能没有C++中的继承功能强大
A12、集合
其实就是STL中容器
STL的容器
不存在耗费资源和时间的装箱和拆箱操作
,因为STL中的容器一般都是模板容器(泛型)
A13、泛型
和C++11中的模板
思想是一样的
巨人也会有走弯路的时候,何况我们常人
A14、委托与事件
和具体的软件框架
相关
可以理解为是事件驱动和消息响应的底层实现
学无止境,需要不断地练习实践才可能真正成为优秀的软件工程师