前言
渐渐的学习C#的过程中,我遇到了抽象类和接口,在看设计模式的书的时候,我就在问自己他们有什么区别呢?现在我想说一点,他们是在我们用面向对象过程中,更加抽象出来的东西,使得模块之间的耦合度降低。
抽象类
理解抽象类
在面向对象的过程中,我们用到的对象是用类来描绘的,但是并不是所有的类都可以用来描绘对象,如果一个类中没有足够的信息来描述一个具体的对象,那么这个类就是一个抽象类。抽象类可以说是把很多对象都使用的方法给封装起来,当然继承抽象类的类也是会有自己独有的特征的。
实例化
抽象类是不可以用来实例化的,可以举一个简单的例子:大家都见过动物吧,好的,那么问一下你,动物是什么动物呢??可见抽象类不能够被用来说具体的东西,我们平时说抽象类的时候也是用继承于抽象类的子类来帮助我们说明这个抽象的类。
方法
抽象类中有方法,这个方法我们可以直接定义一个方法名字,也可以包括具体的方法的实现方法。有一点我想说的是:抽象类中的方法,我们定义一个虚方法,这样我们在他泛化的子类当中可以重写这个方法,从而继承这个抽象类,抽象的方法,我们只能声明,不能进行实现。
关系
抽象类和他的子类之间的关系是泛化的关系。子类可以使用抽象类中的所有方法,同时子类也要实现抽象类中的所有方法。
接口
理解接口
如果是抽象类是用来说物,那么接口可以说是一些方法特征的集合。我们可以在抽象的理解一下接口,为什么厂家生产的CPU放在很多品牌的电脑上都可以使用呢?我们可以理解为这个CPU的接口能够被主板识别,这个接口是不变的,换到很多电脑上我们都可以使用。
现在对这个概念能不能清晰一些了呢?无论里面封装了什么方法,他们对外的接口我们认识,那我们就可以使用了!
实例化
接口可以用来实例化,我们可以用接口来描述一个对象,因为认识的深度为题,现在暂时理解为这是在面向接口编程。
方法
接口中的方法,只是声明了,没有写明具体的实现,关于他的实现我们可以不用考虑,我们使用接口可以理解为完成一个目标,至于这个目标是如何完成的,很多办法,我们都接受。比如:我们要过河,过河是接口,具体你可以划船过去,当然你游过去也是没有问题滴。
关系
刚刚我们所说的抽象类和他的子类之间的关系是泛化,那么接口和使用接口的类之间的关系是什么关系呢?我的答案是实现,他们都是为了实现这个接口的。
结语
慢慢的体会到,不论是抽象类还是接口,他们都是为了降低模块之间的耦合而存在的,为什么呢,忍不住想多说一句,这里围绕着一个开放封闭的原则,简而言之,我们面向对象编程的一个很重要的原则就是对修改关闭,对扩展开放,如果耦合度降低是不是能够降低维护的工作,更好的开放呢!