Java抽象类与接口区别和设计理念差异

        区别一:           抽象类中可以存在非抽象的方法        VS       接口中的方法被默认的变成抽象方法,只要是定义了接口,接口中的方法 就全部变成了抽象类即使你不写 abstract  它也是抽象的方法    

        区别二:            实现抽象类的方法时, 如果方法是抽象的,子类必须重写抽象的方法. 如果方法不是抽象的, 子类可以选择继承         VS       实现了接口 就必须实现接口中的所有方法, 因为接口中的方法默认的全部都是抽象的方法    --------------所以这里可以说, 接口是抽象类的一种, 也可以说接口是抽象类的延伸

        区别三:            抽象类可以有私有的成员变量和成员方法           VS        接口中的方法全都被默认的修饰为: public  abstract   类型的方法

       区别四:            一个类只能继承一个抽象类                 VS         一个类可以实现多个接口  ,接口可以实现多继承   举例:interface display extends aa ,bb,cc ...等等    然后让类去实现 display的接口 就可以实现 display aa bb  cc接口

       区别五:         抽象类中的非抽象的方法可以选择继承          VS      接口中的方法必须全部被重写 ,并且全部是公有的public 方法.
 

注:java8中接口已经可以用default来修饰方法来实现方法而非只能申明方法,java9中接口有static方法了,未来版本可能抽象类和接口间用来编程使用时的差距可能越来越小。所以之间的区别还需从设计理念上来理解。抽象类是面向对象编程中为了简化复用代码而产生的,它是把类抽象出公共属性和行为。接口是一种编程思想,它是抽象行为形成一种规范。

 

设计理念的差异

1、抽象类与接口的抽象层次是不同的 
抽象类是对类抽象,接口是对行为抽象。类包含了属性与行为,所以说接口是更具体的抽象。

设计层面看,抽象类是对类的抽象,是一种模板设计,而接口是对行为的抽象,是一种行为规范。

2、抽象类与接口的设计层次是不同的 
抽象类是一种自下而上的设计,先有子类才能提取公同的属性与行为,抽象出父类; 
接口是一种自上而下的设计,先规定行为方法,只要可以实现这些行为,就可以成为接口的实现类。

3、抽象类与其派生类的关系和接口与其实现类的关系本质是不同的 
抽象类与其派生类是一种“is-a”关系,即父类和派生子类在概念上的本质是相同的(父子关系,血缘联系,很亲密)。 
接口与其实现类是一种“like-a”关系,即接口与实现类的关系只是实现了定义的行为,并无本质上的联系(契约关系,很淡漠的利益关系)。


举个例子:比如说一个动物抽象类,定义了跑的方法、叫的方法,但如果一个汽车类可以实现跑、可以实现叫,它就可以继承动物抽象类吗?!这太不合理了,汽车不是动物呀!而如果通过接口定义跑的方法、叫的方法,汽车类作为实现类实现跑和叫,完全OK很合理,就因为没有继承关系的约束。

 

批注: ISP(Interface Segregation Principle):面向对象的一个核心原则。它表明使用多个专门的接口比使用单一的总接口要好。 
一个类对另外一个类的依赖性应当是建立在最小的接口上的。 
一个接口代表一个角色,不应当将不同的角色都交给一个接口。没有关系的接口合并在一起,形成一个臃肿的大接口,这是对角色和接口的污染。
 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值