抽象类的应用场景
a. 在些情况下,父类只是知道子类应该包含怎样的方法,但无法准确知道这些子类具体的实现方法。
b. 从多个具有相同特征的类中抽象出一个抽象类,以这个抽象类作为子类的模,从而避免子类设计的随意性。
1.接口与抽象类的区别
相同点
- 都不能被实例化
- 接口的实现类或抽象类的子类都只有实现了接口或抽象类中的方法后才能实例化。
不同点
| 比较项 | 抽象类 | 接口 |
|---|---|---|
| 方法 | 可以有非抽象方法 | 所有方法都是抽象方法 |
| 属性 | 属性中可以有非静态常量 | 所有的属性都是静态常量 |
| 构造方法 | 有构造方法 | 没有构造方法 |
| 继承 | 一个类只能继承一个父类 | 一个类可以实现多个接口 |
| 被继承 | 一个类只能继承一个父类 | 一个类可以继承多个接口- |
2. 静态类和非静态类的主要区别
主要区别在于静态类不能实例化,静态类编译器能够执行检查确保不是偶然的添加实例成员,C#编译器会自动把它标记为sealed,静态类中不能创建非静态的方法,即静态方法中只能创建静态方法,但在非静态类中可以调用静态方法。
- 静态类的主要特性:
- 1:仅包含静态成员。
- 2:无法实例化。
- 3:是密封的。
- 4:不能包含实例构造函数。
- 5:非静态类可以包含静态的方法、字段、属性或事件;
- 6:静态方法和属性不能访问其包含类型中的非静态字段和事件搜索
- 7:静态方法只能被重载,而不能被重写,因为静态方法不属于类的实例成员;
- 8:C# 不支持静态局部变量(在方法内部定义静态变量)。
- 非静态类在使用时必须要实例化,每次使用时都要进行实例化,一般情况下使用比较频繁的类,可以使用静态类,比如LogClass,ConfigClass等等。