封装
概念
每个对象都包含它能进行操作所需要的所有信息,这个特性成为封装 。因此对象不必依赖其他对象来完成自己的操作
好处
- 良好的封装能够减少耦合
- 类内部的实现可以自由地修改
- 类具有清晰的对外接口
继承
概念
继承定义了如何相互关联、共享特性。继承的工作方式是:定义父类和子类,或叫做基类和派生类,其中子类继承父类的所有特性。子类不但继承了父类的所有特性,还可以定义新的特性。当两个类之间具备‘is-a’的关系时,就可以考虑用继承了
注:子类从它的父类中继承的成员有方法、域、属性、事件、索引指示器,但对于构造方法,它不能被继承,只能被调用。对于调用父类的成员,可以用base关键字
那什么是基类和派生类呢?
当创建一个类的时候,程序员不需要完全重新编写新的数据成员和成员函数,只需要设计一个新的类,继承了已有的类的成员即可。这个已有的类被称为基类,这个新的类被称为派生类
1、基类和派生类的基本概念
class B : A{}
A是基类,B是派生类
一个类最多只允许从一个类中派生
class C : B{}
B还可以充当C的派生类
继承总是隐式为public的,System.Object是所有类的根
编译器会把你的类悄悄的编译成class A : System.Object{}
2、调用基类的构造函数
1. class B:A 2. { 3. public B():base(){} 4. public B(string sqlstr):base(sqlstr){} 5. }
创建派生类的语法
1. <访问修饰符> class <基类> 2. { 3. 4. } 5. class <派生类> : <基类> 6. { 7. 8. }
一个类可以派生自多个类或接口,这意味着它可以从多个基类或接口继承数据和函数
学习继承需记住
如果子类继承与父类,第一、子类拥有父类非private的属性和功能;第二、子类具有自己的属性和功能,即子类可以扩展父类没有的属性和功能;第三、子类还可以以自己的方式实现父类的功能(方法重写)。说来说去,就一句话——儿子要比老子厉害
继承的优点
- 使得所有子类公共的部分都放在了父类
- 使得代码得到了共享,避免了重复
- 可使得修改或扩展继承而来的实现都较为容易
继承的缺点
- 父类变,子类不得不类
- 继承会破坏包装,父类实现细节暴露给子类,其实就是增大了两个类之间的耦合性
耦合性:是对一个软件结构内部不同模板间联系紧密程度的度量指标。简单的来说,就是藕断丝连,两个类尽管分开,但如果关系密切,一方的变化都会影响到另一方,这就是耦合性高的表现。继承显然时一种类与类之间强耦合的关系
多态
概念
多态表示不同的对象可以执行相同的动作,但要通过它们自己的实现代码来执行
注意
- 子类一父类的身份出现
- 子类在工作时以自己的方式来实现
- 子类以父类的身份出现时,子类特有的属性和方法不可以使用
多态的原理
当方法被调用时,无论对象是否被转换为其父类,都只有位于对象继承链最末端的方法实现会被调用,也就是说,虚方法是按照其运行时类型而非编译时类型进行动态绑定调用的
在使用多态的时候,我们用到了虚方法和方法重写
虚方法
概念
针对抽象方法引出的问题:如果需要在父类中提供一个方法,该方法有自己的方法体,子类根据自己的需要决定是否重写该方法,而不是必须重写,这既是虚方法
- 用virtual修饰
- 要有方法体,哪怕是一个分号
- 可以被子类override
- 除了封装类都可以写
虚方法的使用
- 抽象方法仅仅是声明,没有任何实现内容,抽象方法一般必须在子类中被重写以后才有使用价值
- 使用关键字virtual修改它的虚方法
方法重写
子类可以对父类进行重写,但是返回值和形参不变