抽象类(abstract class)和接口(interface)的区别

               抽象类(abstract class)和接口(interface)的区别

目录

               抽象类(abstract class)和接口(interface)的区别

一:两者的基本定义:

二:两者的相同点:

三:两者的不同点:

四:总结:


 

一:两者的基本定义:

抽象类: 如果一个类中包含抽象方法,那么这个类就是抽象类。可以通过把类或者类中的某些方法声明为abstract(注意abstract只能用来修饰类或者方法,不能用来修饰属性)来表示一个类。

接口:接口是一个方法体的集合,通过关键字interface来实现,接口中的所有方法都没有方法体。

两者的联系:

抽象类和接口都是支持抽象类定义的两种机制,但是两个抽象类意义不一样,两者具有很大的相似性。只要是类中包含有一个抽象方法的类就必须被声明为抽象类,抽象类可以声明方法的存在而不去实现它,并且被声明的抽象方法不能能包含方法体。在实现时,必须包含相同或者更低的访问权限。抽象类在使用过程中不能被实例化,在实现时可以通过创建一个对象使其指向具体的子类,抽象类中的子类为父类提供具体的方法实现。

接口中所有的方法都是抽象的,可以通过接口的间接地实现多重继承。接口中成员变量都是static final类型。由于抽象类可以包含部分方法的实现。因此在一些场合中抽象类比接口具有更多的优势。

二:两者的相同点:

a.都不能被实例化。

b.接口的实现类或抽象类的子类都只有实现了接口或者抽象类中的方法后才能被实例化。

三:两者的不同点:

a.Java8之前,接口只有定义,其方法不能在接口中实现,只有实现接口的类才能实现接口中定义的方法,而抽象类可以有定义和实现,即其方法可以在抽象类中被实现。

b.接口需要实现(关键字implement),但抽象类只能被继承(关键字extends)。一个类可以实现多个接口,但是一个类只能继承一个抽象类(不能实现多继承)。因此使用接口可以间接的实现多重继承的目的。

c.接口强调特定功能的实现,其设计理念是“has-a”的关系;而抽象类强调的是所属关系,其设计理念是“is-a”的关系。

d.接口中默认定义的成员变量是public static final,只能够有静态的不能被修改的数据成员,而且要对其进行初始化处理,其所有的成员方法都是public、abstract的,而且只能被这两个关键字修饰。

抽象类可以有自己的数据成员变量,也可以有非抽象的成员方法,而且抽象类中的成员变量默认为default(本包中可见),也可以被定义为private、protected和public,这些成员变量可以在子类中重新被定义、赋值。抽象类中的抽象方法不能用private、static、等访问修饰符修饰,方法以分号结尾,不带有花括号。

e.接口通常运用于比较常用的功能,便于以后的维护和增删改查。而抽象类一般倾向于公共角色,不适用于对以后代码的维护。

四:总结:

接口是一种特殊形式的类,用接口可以实现大多数抽象类的操作,抽象类多用于同类事物中一些无法具体描述的方法的场景,所以当子类与父类存在有逻辑上的层次结构时,可以使用抽象类。而接口多用于不同类之间,定义不同类之间的通信规则,所以当希望支持差别较大的两个或者更多对象之间特定的交互行为时,可以使用接口。

接口可以继承接口,抽象类实现接口,抽象类也可以实现具体的类,抽象类也可以有静态的main方法。

 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值