抽象类和接口

来源:互联网 发布:电脑板绘软件 编辑:程序博客网 时间:2024/05/17 08:50

一.不同点:

(1)两者表达的概念不一样。类是对对象的抽象,可以把抽象类理解为把类当作对象,抽象成的类叫做抽象类.而接口只是一个行为的规范或规定。抽象类是一类事物的高度聚合,那么对于继承抽象类的子类来说,对于抽象类来说,属于“is a”的关系;而接口是定义行为规范,因此对于实现接口的子类来说,相对于接口来说,是“行为需要按照接口来完成”,是“like a”的关系。例如,狗是对于所有狗类动物的统称,金毛是狗,牧羊犬是狗,那么狗的一般特性,都会在金毛,牧羊犬中找到,那么狗相对于金毛和牧羊犬来说,就属于这类事物的抽象类型;而对于“叫”这个动作来说,狗可以叫,猫也可以叫。很明显,前者相当于所说的是抽象类,而后者指的就是接口。

(2)抽象类在定义类型方法的时候,可以给出方法的实现部分,也可以不给出;而对于接口来说,其中所定义的方法都不能给出实现部分。

(3)继承类对于两者所涉及方法的实现是不同的。继承类对于抽象类所定义的抽象方法,可以不用重写,也就是说,可以延用抽象类的方法;而对于接口类所定义的方法或者属性来说,在继承类中必须要给出相应的方法和属性实现。

(4)在抽象类中,新增一个方法的话,继承类中可以不用作任何处理;而对于接口来说,则需要修改继承类,提供新定义的方法。

(5)一个类一次可以实现若干个接口,但是只能继承一个父类

抽象类主要用于关系密切的对象,而接口适合为不相关的类提供通用功能 。抽象类是对根源的抽象。抽象类表示的是,这个对象是什么。  接口是对动作的抽象接口表示的是,这个对象能做什么 。

 

二.相同点:

(1)不能实例化;

(2)包含未实现的方法声明;

(3)派生类必须实现未实现的方法,抽象类是抽象方法,接口则是所有成员(不仅是方法包括其他成员);

 

三.抽象方法和虚方法:

   抽象方法:

(1)使用abstract关键字   例如:public    abstract    bool   Withdraw(…);  

(2)抽象方法只能在抽象类中声明,抽象方法必须在派生类中重写  

(3)抽象方法是可以看成是没有实现体的虚方法  

   如果类中包含抽象方法,那么类就必须定义为抽象类,不论是否还包含其它一般方法。

   虚方法:

(1)使用virtual关键字   例如:public    virtual    bool   Withdraw(…);  

(2)调用虚方法,运行时将确定调用对象是什么类的实例,并调用适当的覆写的方法。  

(3)虚方法必须有实现部分,子类可以覆盖也可以不覆盖,根据取决于要求。

 

   对抽象类和接口进行比较并不是强调用什么不用什么,而是要想方设法把这两种方法合理地运用到代码中去。

   

0 0
原创粉丝点击