A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 阮佳佳 中级黑马   /  2012-12-24 16:59  /  2047 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

如题,abstract class和interface有什么区别?

评分

参与人数 1技术分 +1 收起 理由
宋天琪 + 1

查看全部评分

5 个回复

正序浏览
相同点:都可以被继承,都不能直接实例化,都可以使用多态性访问自己的成员。
不同点:抽象类只能继承一个抽象类,接口可以继承多个基接口;抽象类可以拥有非抽象成员(有代码本),接口只能定义成员。抽象类的非抽象成员可以是私有的,接口成员必须是公共的。接口不能包含字段,构造、析构函数,静态成员和常量。
抽象类一般用于继承,定义继承链上的通用功能。接口一般用于没有关系的类的通用功能

评分

参与人数 1技术分 +1 收起 理由
宋天琪 + 1

查看全部评分

回复 使用道具 举报
相同点:
都不能被直接实例化,都可以通过继承实现其抽象方法。
不同点:
接口支持多继承;抽象类不能实现多继承。
接口只能定义行为;抽象类既可以定义行为,还可能提供实现。
接口可以用于支持回调(CallBack);抽象类不能实现回调,因为继承不支持。
接口只包含方法(Method)、属性(Property)、索引器(Index)、事件(Event)的签名,但不能定义字段和包含实现的
方法;
抽象类可以定义字段、属性、包含有实现的方法。
接口可以作用于值类型(Struct)和引用类型(Class);抽象类只能作用于引用类型。例如,Struct 就可以继承接口,
而不能继承类。

评分

参与人数 1技术分 +1 收起 理由
宋天琪 + 1

查看全部评分

回复 使用道具 举报
本质差不多一个是接口,一个是虚函数
抽象类里面可以定义方法,也可以实现方法,interface只能定义,抽象类的的方法在子类中可以不实现,也可以重写父类的方法, 而接口中的所有方法一定要实现,不可遗漏

评分

参与人数 1技术分 +1 收起 理由
宋天琪 + 1

查看全部评分

回复 使用道具 举报
声明方法的存在而不去实现它的类被叫做抽象类(abstract  class),它用于要创建一个体现某些基本行为的类,并为该类声明方法,但不能在该类中实现该类的情况。不能创建abstract  类的实例。不能有抽象构造函数或抽象静态方法。Abstract   类的子类为它们父类中的所有抽象方法提供实现,否则它们也是抽象类为。取而代之,在子类中实现该方法。知道其行为的其它类可以在类中实现这些方法。
使用abstract class的方式定义Demo抽象类的方式如下:  

abstract class Demo {  
abstract void method1();  
abstract void method2();  
…  
}  

使用interface的方式定义Demo抽象类的方式如下:  

interface Demo {  
void method1();  
void method2();  
…  
在abstract class方式中,Demo可以有自己的数据成员,也可以有非abstarct的成员方法,而在interface方式的实现中,Demo只能够有静态的不能被修改的数据成员(也就是必须是static final的,不过在interface中一般不定义数据成员),所有的成员方法都是abstract的。从某种意义上说,interface是一种特殊形式的abstract class。  



评分

参与人数 1技术分 +1 收起 理由
宋天琪 + 1

查看全部评分

回复 使用道具 举报
1.
抽象类偏重于IS-A的关系(是什么)
接口偏重于CAN-DO的关系(能做什么)
2.
抽象类(abstract class)可以包含功能定义和实现。
接口(interface)只能包含功能定义。
3.
抽象类中的抽象方法在子类必须用override关键字重写
而子类实现接口中的方法中无须指定override关键字

评分

参与人数 1技术分 +1 收起 理由
宋天琪 + 1

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马