面向对象
类就是对象在程序中的模拟实现,类决定了对象将要拥有的属性和行为
类是一种数据类型,用户自定义的数据类型
类的组成:字段、属性、方法、构造函数等
对象时具体的,是类的具体实例。对象具有属性(特征)和方法(行为)
一、面向对象的三大特征:
- 封装
类和对象本身就是封装的体现
(1)属性封装了字段
(2)方法的多个参数封装成了一个对象
(3)将一堆代码封装到了一个方法中
(4)将一些功能封装到了几个类中
(5)将一些具有相同功能的代码封装到了一个程序集中(dll、exe),并且对外提供统一的访问接口(属性名、方法名等)
(6)封装减少了大量的冗余代码
- 继承
(1)继承是指类与类之间的关系
(2)继承带给我们的好处
① 继承减少了类中的冗余代码
② 让类与类产生了关系,为多态打下了基础
(3)继承的特性
① 单根性 :一个子类只能有一个父类
② 传递性:爷爷类 爹类 儿子类
(4)里式转换
指定一个父类类型,指向一个子类的对象/ 将子类对象赋给父类
只要子类继承父类,那么子类的对象可以赋值给父类
① 子类可以赋值给父类
② 如果父类中装的是父类对象,则可以将这个父类转换为对应的子类对象
③ 里式转换关键字
- is:返回bool类型,指示是否可以做这个转换
- As:如果转换成功,则返回对象,否则返回null
④ 作用:我们可以将所有的子类都当做是父类来看,针对父类进行编程,写出通用的代码,适应需求的不断变化
- 多态
(1)多态的作用:把不同的子类对象都当做父类来看,可以屏蔽不同子类对象之间的差异,写出通用的代码,做出通用的编程,以适用需求不断变化
(2)多态就是指不同的对象收到相同的消息时,会产生不同的行为,同一个类在不同的场合下表现出不同的行为特征
二、虚方法
- 虚方法需要注意的几点
(1)父类中如果有方法需要让子类重写,则可以将该方法标记为virtual
(2)虚方法在父类中必须有实现,哪怕是空实现
(3)虚方法子类中可以重写(override),也可以不重写
三、抽象类
抽象类中可以有抽象方法,也可以没有抽象方法,抽象方法不能实现
- 抽象方法:
(1)抽象方法需要用abstract关键字标识
(2)抽象方法不能有任何方法实现
(3)抽象成员必须包含在抽象类中
(4)由于抽象方法没有任何实现,所以子类必须将抽象方法重写
(5)抽象类不能实例化
(6)抽象类中可以包括抽象方法,也可以包括非抽象方法
(7)抽象类不能为静态类,即不能用static修饰
(8)抽象类有构造函数,虽然不能被实例化
(9)抽象成员的访问修饰符不能是private
(10)子类继承抽象类后,必须把父类中的所有抽象成员都重写,除非子类也是一个抽象类,则可以不重写
(11)父类不确定子类如何实现自己的行为,就将其行为定义为一个抽象的函数
四、接口
- 接口中只能包含方法(属性、事件、索引器也都是方法)
- 接口中的方法不能有任何实现
- 接口不能被实例化,也就是说接口不能(new)创建对象,跟抽象类一样,因为创建对象没有意义
- 接口是一种规范也是一种能力
- 接口具有功能单一性
- 接口中的成员不能有任何访问修饰符(默认为public)
- 继承接口的子类必须将接口中的所有成员方法都实现
- 子类实现接口的方法时,不需要任何关键字,直接实现即可
- 接口存在的意义就是为了多态
五、关键字
- new
① 创建对象
——》在堆中开辟空间
——》在开辟的堆空间中创建对象
——》调用对象的成员
② 隐藏父类的成员
- This
① 代表当前类的对象
② 显示的调用用自己的构造函数
- Base
① 显示调用父类的构造函数
② 调用父类的成员