抽象类和接口

来源:互联网 发布:淘宝客服售前话术大全 编辑:程序博客网 时间:2024/04/30 21:09

 

抽象类和接口

 

        最近在实践一个项目,其中有一个写细节,可以用抽象类,也可以用接口,这到底有什么好,这又有什么区别呢?

 

定义:

抽象类:


          在编码中,把类和方法声明Abstract,即可抽象类和抽象方法。

abstract class Strategy    {        public abstract voidAlgorithmInterface();    } 

 

 接口:


      吧隐式公共方法和属性组合起来,以封装特定功能的一个集合。一旦实现了接口,类就可以支持所指定的所有属性和成员。生命接口在语法上和声明抽象类完全相同。

  注意:但不允许提高接口中任何成员的执行方式。


(1)接口不能实例化,不能有构造方法和字段;


(2)不能有修饰符,比如public、private等等;


(3)不能声明虚拟的或静态的

 

interface IStrategy    {       voidAlgorithmInterface();    } 


 

详细特点:

抽象类特点:

   第一,  抽象类不能实例化,比如“动物”实例化是没有意义的。


   第二,  抽象方法必须被子类重写的方法,不重写,就没有存在的意义了。---这其实可以看做是没有实体的虚方法。


   第三,  如果类中有抽象方法,那么类就必定是抽象类,不管它是否有其他的方法。

 

 


 

接口特点:

(1)  实现接口就必须要实现接口中所有的方法和属性。

(2)  一个类可以支持多个接口,多个类也可以支持相同的接口。

(3)  接口的命名,前面要加一个大写字母“I”。

(4)  接口的声明是Interface,而不是class,接口中方法或属性前面没有任何的修饰符、方法没有方法体。




                                        

 

 

对比抽象类和接口:

            比如猫,狗都是动物,有很多的相似之处,我们可以去继承动物这个抽象类;而飞机,麻雀,超人这些不相关的类,但又有共同特点,可以去实现相同的接口。

 

        抽象类是有好几个子类,之后抽象出来的,然后由子类继承父类;而接口是根不知道子类的存在,方法如何实现还不确定,只是预先定义。-----抽象类是自底向上抽象出来,而接口是自顶向下设计出来的。




(1) 抽象类可以给出一些成员的实现,接口却不包含成员的实现


(2) 抽象类的抽象成员可被子类部分实现,但是接口的成员必须要实现类完全实现。


(3) 一个类只能继承一个抽象类,但是hi可以实现多个接口


(4) 类是对对象的抽象;抽象类是对类的抽象;接口是对行为的抽象。他们共性都是——————抽象。


(5) 如果行为跨域不同类的对象,可以使用接口;对于一些相似的类对象,用继承抽象类。比如猫,狗都是动物,有很多相似东西,我们可以用抽象类;飞机、麻雀、超人完全不相关类,但都会飞,我们可以去实现相同的接口。


(6) 从设计角度来说,抽象类是从子类中发现公共的东西,泛化出父类,然后子类继承父类;而接口是根本不知道子类的存在,方法如何实现还不确认,预先定义。

 

 



同一功能可以用抽象类也可用接口实现


写成抽象类代码:

<span style="font-size:18px;">namespace Strategy1._0{    abstract class Strategy    {        public abstract voidAlgorithmInterface();    }}</span>


 

写成接口代码:

<span style="font-size:18px;">namespace Strategy1._0{    interface IStrategy    {       voidAlgorithmInterface();    }}</span>


 

0 0
原创粉丝点击