首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Eiffel中的多重继承

Eiffel中的多重继承
EN

Stack Overflow用户
提问于 2011-01-16 21:31:49
回答 2查看 629关注 0票数 1

Hoi,eiffel中的多重继承真的把我搞糊涂了,谁能告诉我French_Us_Driver从它的父类继承了什么类?

代码语言:javascript
复制
 class Driver

   feature(ANY)

      violation  

    end
 end --end Driver

 class French_Driver

    inherite

       Driver

     rename

      violation as French_violatin

  end

  end -- end French_Driver

  class US_Driver

   inherit

    Driver

   rename 

    violation as Us_violation
  end

 end --end Us_Driver

 class French_Us__Driver

   inherit

     French_Driver

     Us_Driver
   end

 end --French_Us_Driver

现在具有French_Us_Driver功能:Us_violationFrench_violationviolation

或者:Us_violationFrench_violation

谢谢

EN

回答 2

Stack Overflow用户

发布于 2011-01-18 00:29:04

French_Driver仅重命名一个特征violation,它不会添加任何新的特征。因此,我们只能对它调用French_violation,而不能调用violation (由于重命名,该类中不再有这样的名称)。类Us_Driver也是如此。

因此,类French_Us_DriverFrench_Driver继承了一个特性French_violation,从Us_Driver继承了一个特性Us_violation,因此总共有两个特性:French_violationUs_violation

如果功能violation的起源没有共同的祖先,那么故事就到此为止。因为French_Us_Driver类现在有从Driver类继承的特性violation的两个版本(一个版本名为French_violation,另一个版本名为Us_violation),所以当对象的类型为violation时,在Driver类中调用特性French_Us_Driver时,不清楚应该使用哪个版本。应通过向其中一个父子句添加select子句来解决冲突,例如:

代码语言:javascript
复制
class French_Us_Driver inherit
   French_Driver
      select French_violation end
   Us_Driver
end

然后,当从French_Us_Driver类型的对象上的Driver类调用功能violation时,实际上将调用功能French_violation

最后,可以将两个版本的功能合并为一个功能,方法是为它们提供相同的名称,而不必与源的名称匹配(下面的代码省略了功能重新声明的其他细节,并为简单起见假设所有功能都被推迟):

代码语言:javascript
复制
class French_Us_Driver inherit
   French_Driver
      rename French_violation as French_Us_violation end
   Us_Driver
      rename Us_violation as French_Us_violation end
end
票数 2
EN

Stack Overflow用户

发布于 2011-02-03 00:26:23

不要只是随意选择。下面是select的一个经过深思熟虑的用法,它可能就是您想要的。(我将投票支持另一个答案,因为它是正确的,除了在如何使用select时没有提供任何帮助。)

代码语言:javascript
复制
class 
    French_Us_Driver 
inherit
   Driver 
      select 
          violation 
      end
   French_Driver end
   Us_Driver end
feature
    violation
        inspect country
            when france then French_violation
            when usa    then Us_violation
        end --inspect
    end --violation
end --class
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4705611

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档