在继承和接口的上下文中协议和契约的含义

时间:2015-08-22 03:34:43

标签: java inheritance interface

我正在首先阅读Bert Bates,Kathy Sierra的Java。 我在继承和接口的上下文中理解协议和契约这个词时遇到了问题。

例如以下段落:

  

继承可以保证所有类分组在一个   某些超类型具有超类型具有的所有方法。在   换句话说,您为一组类定义通用协议   通过继承相关。

和此:

  

在超类中定义方法时,可以继承   子类,你宣布一种协议到其他代码   他说,“我所有的子类型(即子类)都能做到这些   这些看起来像这样的方法......“   换句话说,你建立一个   的合同即可。

协议和合同是什么意思,在java中有多大用处?

2 个答案:

答案 0 :(得分:2)

  

协议和合同的含义是什么,以及它的用处有多大   java吗?

合同表示实现您声明的接口的类将与接口的合同(方法)一致,这意味着它肯定会添加interface的抽象方法的实现。让我们检查以下示例,

interface Teacher {
    void teach();
}

请注意,任何主题的每位教师,即ScienceTeacherEnglishTeacher (将其视为正在实施教师的课程)等将会做一个共同的事情,即他们肯定是不同的,但肯定。

另一方面,当你在超类中声明不是抽象的方法时,确实该类的子类将具有默认行为,因为它的超类具有。是的,它可以改变行为,但会绑定以拥有共同的协议或它的父级可以拥有的功能。考虑以下示例,

class Parent {
   public void sleep() { 
      System.out.println("Sleeping At 10 PM.")
   }
}

现在,请注意Parent的每个孩子都会在晚上10点睡觉,是的,它可以改变它自己的时间,但协议表示它会睡眠肯定。

答案 1 :(得分:1)

它们非常相似,但它们强调不同的东西。

当我读到一个协议时,我主要思考的是信息流。我的思想主要集中在一切运作良好时会发生什么:如果我给X,那么我就会得到Y.

当我读到合同时,我主要考虑边缘情况。我的思想更少关注常见案例,而更多关注边缘案例。换句话说,我正在考虑合同条款:我承诺什么,以及我承诺的回报是什么?例如,也许我保证方法的参数不是null;也许这种方法承诺,如果我保持讨价还价的结束,它将返回一个非负整数。

当然,你可以用另一个来表达这些想法中的任何一个。如果你真的深入研究协议,你可能会遇到类似#34;如果参数是null,结果是NullPointerException。"这是一种更基于协议的方式来看待它,而不是基于契约的方法,嘿,不要给我一个null!如果你这样做,我会向你抛出一个例外!"

另一种看待它的方式是,协议是关于扩展程序的范围(您正在添加可以提供或接收信息的方式),而合同是关于限制范围的程序(您在接收的输入或您返回的输出上建立约束)。