埃菲尔铁塔:有没有办法禁止使用任何特别继承的创建方法?

时间:2018-10-30 14:43:24

标签: inheritance createprocess eiffel

因为default_create始终是创建方法的一个示例,如果我不想允许类的后代将其用作创建方法,则可以将其用作create some_instance的实例创建有办法吗?

A

deferred class A
feature
   make (a_db_connection: DB_CONNECTION)
      do
          default_create
          db_connection := a_db_connection
      end

B

class B
inherit
    A
create
    make
    -- default_create -- I'd be able to do that and want to avoid it

1 个答案:

答案 0 :(得分:0)

一旦一个过程没有被列为创建过程,就不能将其用于创建对象。在原始示例中,可以使用B创建类make的实例,但不能使用default_create创建实例,即创建指令create b将被标记为错误(假设{ {1}}的类型为b)。

另一方面,如果根本没有B子句,并且不推迟类,则使用过程create创建对象。可以通过创建一个空的创建子句来禁止这种情况:

default_create

摘要:

  1. 不创建子句:使用class C inherit A create -- There are no creation procedures, no instance of the class can be created. feature ... end
  2. 空创建子句:无法创建任何实例。
  3. 非空创建子句:仅列出的过程可用于创建。