abstract class和interface有什么区别

 

抽象类用于要创建一个体现某些基本行为的类不能有抽象构造函数或抽象静态方法。Abstract 类的子类为它们父类中的所有抽象方法提供实现,否则它们也是抽象类。abstract方法不能被声明为private,因为abstract类会被其他类继承。无法生成一个abstract类的对象,但可声明一个abstract类类型的变量。(is-a

接口中所有方法都是抽象的多继承性可通过实现这样的接口而获得。接口只可以定义static final成员变量。允许使用接口名作为引用变量的类型。通常的动态联编将生效。instanceof 运算符可以用来决定某对象的类是否实现了接口。(has-a)

以下情况,此类必须声明为abstract

    该类有一个或超过一个abstract方法(声明但没有定义的方法)

    该类从一个abstract类继承一个或超过一个abstract方法,但没有提供这些方法的实现方法

    该类实现一个接口,但没有将该接口所有的方法加以实现

interface的特性整理如下:
1. 
接口中的方法可以有参数列表和返回类型,但不能有任何方法体。
2. 
接口中可以包含字段,但是会被隐式的声明为staticfinal
3.
接口中的字段只是被存储在该接口的静态存储区域内,而不属于该接口。
4. 
接口中的方法可以被声明为public或不声明,但结果都会按照public类型处理
5. 
扩展一个接口来生成新的接口应使用关键字extends,实现一个接口使用implements

interface在某些地方和abstract有相似的地方,但是采用哪种方式来声明类主要参照以下两点:

1.如果要创建不带任何方法定义和成员变量的基类,那么就应该选择接口而不是抽象类。

2.如果知道某个类应该是基类,那么第一个选择的应该是让它成为一个接口,只有在必须要有方法定义和成员变量的时候,才应该选择抽象类。因为抽象类中允许存在一个或多个被具体实现的方法,只要方法没有被全部实现该类就仍是抽象类。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值