接口与子类型

本文探讨了接口在Java编程中的使用,强调接口作为抽象数据类型的契约特性,允许多态实现。文章指出,接口确保了类之间的解耦合,同时通过子类型的概念,解释了如何通过实现接口来确保类型兼容性和规范遵循。作者通过正方形和矩形的例子,展示了如何在可变形状上下文中,正确和错误地实现接口,从而阐述了接口和子类型之间的微妙关系。
摘要由CSDN通过智能技术生成

在做实验二的时候开始使用接口来进行编程,但是没有系统的总结过关于接口的用法的知识,最近趁着期末复习,将接口在编程时的使用的知识做一个总结,同时,检查一下对于知识的理解程度和思考。

接口

接口(interface)是Java中一种表示抽象数据类型的方法,接口内部是一连串的方法标识,但是没有定义。要使用接口就要用一个类来实现接口,在类的内部提供接口中所有方法的定义。

这种做法的⼀个优点就是接⼝只为使⽤者提供“契约”(contract),⽽使⽤者只需要读懂这个接⼝即可使⽤该ADT,他也不需要依赖ADT特定的实现/表⽰,因为实例化的变量不能放在接⼝中(具体实现被分离在另外的类中)。

接⼝的另⼀个优点就是它允许了⼀种抽象类型能够有多种实现/表⽰,即⼀个接⼝可以有多个实现类。Java的静态检查会发现没有实现接⼝的错误,例如,如果程序员忘记实现接⼝中的某⼀个⽅法或者返回了⼀个错误的类型,编译器就会在编译期报错。

子类型

“B是A的⼦类型”就意味着“每⼀个B都是A”,换句话说,“每⼀个B都满⾜了A的规格说明”。这也意味着B的规格说明⾄少强于A的规格说明。当我们声明⼀个接⼝的实现类时,编译器会尝试做这样的检查:

它会检查类是否全部实现了接⼝中规定的函数,并且检查这些函数的标识是否对的上。

但是编译器不会检查我们是否通过其他形式弱化了规格说明:例如强化了某个⽅法输⼊的前置条件,或弱化了接⼝。对于⽤户的保证(后置条件)。如果你在Java中定义了⼀个⼦类型,你必须要确保⼦类型的规格说明⾄少要⽐⽗类型强。

我们为矩形定义⼀个接⼝:

 ⽽每⼀个正⽅形类型都是矩形类型:

Mutable shapes

而对于一个可变的矩形

正方形:

 对于下⾯的MutableSquare.setSize(..) 实现

 正方形不是矩形类型的,因为正方形有更强的前置条件。

 正方形不是矩形类型的,正方形有更弱的后置条件。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值