面向对象--接口

接口

接口是百分百纯抽象类:只含有抽象方法(无实体)

接口VS抽象类

一、区别

interface:只有方法没有具体实现 方法只能是public或者不写默认为public ;

变量全为final——不可修改。即接口本身的特性规定了只能定义常量,否则实现的子类a改变了其定义的值,那么其他实现类的值都将随之变化,这样就成了抽象类的特征了,失去了接口更高级的抽象意义。

abstract class:方法可以有具体实现,或者是abstract抽象方法

接口就是一个抽象类,没有变量和方法实现。如果一个抽象类所有的方法都是抽象的就可以将此类用接口来定义。

二、优点

interface:主要针对于功能、动作。将拥有这些动作的类实现此接口如:鸟、飞机都能fly();

体现了开闭原则:对修改关闭,对扩展开放;

abstract class:将拥有共同属性 特征的类继承此类,父类中添加新方法时子类将全部拥有而不用逐一去新增。

当子类拥有父类中的特性是便可以去extends,体现了代码的复用性。继承——灵活性;实现——严谨性;

原文:https://blog.csdn.net/sawelly/article/details/50623978

定义一个接口
[修饰符] interface 接口名 [extends 父接口名列表]{  //可以继承父接口
	[public] [static] [final] 常量;
	[public] [abstract] 方法;   //抽象方法,无实体
}

与Java的类文件一样,接口文件的文件名必须与接口名相同。

实现一个接口(implement)
[修饰符] class <类名> [extends 父类名] [implements 接口列表]{  //可以实现多个接口
}

在类中实现接口时,方法的名字、返回值类型、参数的个数及类型必须与接口中的完全一致,并且必须实现接口中的所有方法。
在类的继承中,只能做单重继承,而实现接口时,一次则可以实现多个接口,每个接口间使用逗号“,”分隔。这时就可能出现常量或方法名冲突的情况,解决该问题时,如果常量冲突,则需要明确指定常量的接口,这可以通过“接口名.常量”实现。如果出现方法冲突时,则只要实现一个方法就可以了。
在这里插入图片描述
注:尽可能提高程序的抽象性,并减少方法之间的相互依赖,否则在子类继承重写之后就会出错。

Invokevirtual vs invokeinterface (调用)

在这里插入图片描述
A benchmark code to compare invokevirtual with invokeinterface performance. invokeinterface is 38% slower.

default method (缺省方法)

在这里插入图片描述
在 java 8 之前,接⼝与其实现类之间的 耦合度 太⾼了(tightly coupled),当需要为⼀个接⼝添加⽅法时,所有的实现类都必须随之修改。默认⽅法解决了这个问题,它可以为接⼝添加新的⽅法,⽽不会破坏已有的接⼝的实现。这在 lambda 表达式作为 java 8 语⾔的重要特性⽽出现之际,为升级旧接⼝且保持向后兼容(backward compatibility)提供了途径。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值