java抽象类与接口的异同

两者相似之处在于:抽象类和接口都不能被实例化,两种都是java实现抽象的方式。不同之处分两个方面:


一、语法层面

  1. 抽象类可以有构造方法,接口中不能有构造方法;
  2. 抽象类中可以有普通成员变量,接口中没有普通成员变量(默认public static final );
  3. 抽象类中可以包含非抽象的普通方法,接口中的所有方法必须都是抽象的;
  4. 抽象类中的抽象方法的可以是public,protected的,但接口中的抽象方法只能是public的;
  5. 抽象类中可以包含静态方法,接口中不能包含静态方法
  6. 抽象类中可以包含任意访问权限的静态成员变量,但接口中定义的变量只能是public static final类型。
  7. 一个类可以实现多个接口,但只能继承一个抽象类。

二、思想层面

 

     抽象类 在Java中体现了一种继承关系,要想使得继承关系合理, 抽象类 和派生类之间必须存在“is-a”关系,即 

父类和子类在概念本质上应该是相同的。对于interface来说则不然,并不要求 interface的实现类和interface定义在概念本质上是一致的,仅仅是实现了interface定义的契约(模版)而已。


总结来说:

 

     抽象类与子类为"is a"关系,它抽象出事物的共同本质特征,可单一继承;

     接口与实现类为"like a"关系,它定义并规范了个性化的功能特征,可多重继承(实现)。

 

thinking in java中有个经典的关于门的例子,可以网上搜索看一下。

 

 

 

 

 

 

 

 

 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值