继承是面向对象设计理论的基石,抽象理论和方法是继承理论的顶梁柱。
抽象类与抽象方法
用来描述共性的类叫做抽象类,抽象类中不考虑具体实现,只确定必须具有的行为,即确定抽象方法。
如教师的任务是教学,具体教什么,如何教,每个教师都有自己独特的一面,对教学这个动作就可以提取出来作为抽象方法,而不考虑具体实现内容。
包含抽象方法的类就是抽象类,抽象类和抽象方法声明使用abstract关键字。
// 语法<访问修饰符> abstract class 抽象类名{// 类体<访问修饰符> abstract 返回类型方法(); // 抽象方法}
// 示例public abstract class Test{public abstract void Display(); // 抽象方法 --> Display()后面不能加 {}, 声明了abstract无法声明主体}
实现抽象方法
C#中通过方法重写来实现抽象方法。
- 当一个抽象基类派生一个派生类时,派生类将继承基类的所有特征,重新实现所有的抽象方法。
- 在派生类中实现基类的抽象方法,是使用override关键字来重写基类方法。
using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;namespace AbstractTest{class Program{static void Main(string[] args){Manager objManager = new Manager(\"jay\");objManager.Display(); // name: jayConsole.ReadKey();}}public abstract class Employee // 声明抽象类{public abstract void Display(); // 抽象方法Display()}public class Manager: Employee // 创建抽象类Employee的派生类Manager类{private string name;public Manager(string name) // 构造函数实现name初始化{this.name = name;}public override void Display() // 重写基类Employee中的抽象方法Display(){Console.WriteLine(\"name: \" + name);}}}
接口、类和抽象类
一个类可以同时继承类和接口,或者抽象类和接口,抽象类和类不能在一个类的继承列表中同时出现。
如果派生类同时继承类或抽象类和接口,一定要把类或者抽象类写在前面,接口写在后面,类名和接口名之间用“,”隔开,接口没有先后顺序。每一种继承都要根据各自的规则去实现。
接口与抽象类的区别
- 抽象类是一个不完全的类,需要通过派生类完善
- 接口只是对类的约束,它仅仅承诺了类能够调用的方法
- 一个类一次可以实现若干个接口,但一个类只能继承一个基类
- 抽象类只需派生类实现它的抽象方法,接口要求必须实现它的所有成员
- 在实际编程中,接口的使用要比抽象类广泛得多
密封类
与抽象类相反的是,C#支持创建密封类,密封类是不能当做基类的类。其他的类不能从此类派生,从而保证了密封类的密封性和安全性。在C#中使用sealed关键字创建密封类。
// 示例public sealed class Animal // 创建密封类{public Animal() // 创建构造函数{// 函数主体Console.WriteLine(\"Animal被构造\")}}
当从Animal派生派生类时,编译器会提示出现错误。设计类的时候,通常情况下是不需要将类设置为密封类的,因为密封类会让类的扩展性非常差,这个类也无法再次扩展和派生。但是出于某种目的,当程序块只需要完成某些特定的功能或者在商业上为了保密,就可以使用密封类对类进行密封,以保证类的可靠性。
- 点赞
- 收藏
- 分享
- 文章举报
Yeats.NeverGiveUp发布了12 篇原创文章 · 获赞 0 · 访问量 162私信关注