- 什么是对象?对象是一个自包含的实体,用一组可识别的特性和行为来标识.
- 什么是类? 类是具有相同属性和功能的对象的抽象的集合.
- 什么是实例?实例就是一个真实的对象.实例化就是创建对象的过程,用new关键字来创建.new关键字用来在内存中申请一个空间存放数据.
- 构造函数 默认一个无参数的构造函数,在new class的时候调用
- 方法重载 可在不改变原方法的基础上增加功能,方法名相同,参数类型或个数有所不同
- 字段是存储类要满足其设计所需要的数据,是与类相关的变量
- 属性是一个方法,但在调用他们的代码看来他是一个字段,属性适合以字段的方式使用方法调用的场合(使用属性可以设置符合要求的的字段的值)
- Public 允许任何类访问 private 仅允许同一个类的成员访问,他的子类也不能访问,定义变量时默认为private,protected的子类可以访问基类
- 封装:每个对象都包含它能进行操作所需要的所有信息,因此对象不必依赖其他对象来完成自己的操作 好处,减少耦合,内部可自由修改,具有清晰的对外接口
-
继承代表了一种 "is-a"的关系,还可以理解为是对被继承者的特殊化,除了具备被继承者的特性外,还具备有自己的独有个性,他定义类之间如何关联共享.
- 子类拥有父类非private的属性和功能
- 子类可以扩展父类没有的属性和功能
- 子类还可以以自己的方式实现父类的功能(方法重写)
- 子类不能继承基类的构造方法,只能被调用,可以使用base关键词
- 继承使得所有子类公共的部分都放在了父类,使得代码得到共享,避免重复
- 使得修改或扩展变得容易
- 缺点,父类变则子类不得不变,破坏封装,父类实现的细节暴露给子类
- 强耦合的关系,当2个类具备is-a的关系时,就可以考虑用继承
-
多态表示不同的对象可以执行相同的操作,但要通过他们自己的实现代码执行
- 子类以父类的身份出现
- 子类工作的时候以自己的方式来实现
- 子类以父类的身份出现的时候,子类特有的属性和方法不可以再使用
- 虚方法 virtual 为了让子类的实例完全接替来自父类的类成员,父类必须将该成员声明称虚拟的, 虚方法是按照运行时类型而非编译时类型进行动态绑定调用
- 子类可以选择使用override关键字,来实现替换父类的实现,方法重写
-
抽象类
- 类和方法前加上abstract,即抽象类和抽象方法
- 抽象类不能实例化
- 抽象方法是必须被子类重写的方法
- 如果类中包含有抽象方法,那么类就必须定义为抽象类,不论是否还包含有其他一般方法
- 抽象类拥有尽可能多的共同代码,拥有尽可能少的数据
- 抽象类通常代表一个抽象概念,他提供一个继承的出发点,当设计一个新的抽象类时,一定是用来继承的.
-
接口是把隐式公共方法和属性组合起来,以封装特定功能的一个集合
- 实现接口类就必须实现接口中的所以方法和属性
- 一个类可以实现多个接口
- 接口中的方法或属性前面不能有修饰符,方法没有方法体
-
抽象类与接口的区别
- 抽象类可以给出一些成员的实现,接口却不包含成员的实现
- 抽象类中的成员可以被子类实现,而接口的成员需要类完成实现
- 一个类只能继承一个抽象类,而可以接受多个接口
- 类是对对象的抽象,抽象类是对类的抽象,接口是对行为的抽象
- 如果行为跨越不同类的对象,可使用接口,对于一些相似的类对象,用继承抽象类
- 从设计角度讲,抽象类是从子类中发现了公共的东西,泛化出父类,然后子类继承父类,而接口是根本不知道子类的存在,方法如何实现还不确认,预先定义
- 通过重构改善既有代码设计
-
泛型是具有占位符的类接口结构和方法
- 使用泛型不需要装箱拆箱
-
委托与事件
- 委托是对函数的封装,可以当作给方法的特征指定一个名称.而事件是委托的一种特殊形式,当发生有意义的事情时,事件对象处理通知过程
- 委托是一种引用方法的类型,一旦为委托分配了方法,委托将与方法具有相同的行为
- 在发生其他类或对象关注的事情时,类或对象可通过事件通知他们