问题标签 [inheritance]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
571 浏览

inheritance - 如何删除此并行层次结构

我正在尝试为以下场景找到最佳设计 - 一个存储舞蹈比赛结果的应用程序。

一个事件包含多轮,每轮包含许多表演(每支舞一个)。每场表演都由许多评委进行评判,评委会返回一张计分表。

有两种类型的轮次,最后一轮(包含 6 对或更少的舞蹈对)或正常轮(包含超过 6 个舞蹈对)。每个都需要稍微不同的行为和数据。

在最后一轮的情况下,每张计分表都包含决赛中 6 对夫妇的有序列表,显示法官将哪对夫妇排在第 1 名、第 2 名等。我称这些排名为“计分表包含 6 个排名”。一个位置包含一对夫妇的号码,这对夫妇是什么地方

在正常轮次的情况下,每个计分表包含一组无序的 M 对(M < 进入轮次的对数 - 由比赛组织者确定的确切值)。我将这些回忆称为:“M 回忆的记分表”。召回不包含分数或排名

例如在决赛中

  • 第一名:56对
  • 第二名:情侣234
  • 第三名:情侣198
  • 第四名:情侣98
  • 第五名:情侣3
  • 第六名:情侣125

为正常一轮以下夫妇被召回54,67,201,104,187,209,8,56,79,35,167,98

我的天真版本实现为

事件 - has_one final_round, has_many rounds

final_round - has_many final_performances final_performance - has_many final_scoresheets final_scoresheet - has_many 排名

回合 - has_many 表现 表现 has_many scoresheets scoresheet has_many 回忆

但是我不喜欢这需要的重复,而且我有几个并行的层次结构(用于回合、性能和计分表),这将是一个痛苦的维护。

0 投票
3 回答
906 浏览

python - 装饰父类方法

我想创建一个具有父类方法的子类,其中该方法是子类中的“classmethod”,而不是父类中的“classmethod”。

本质上,我正在尝试完成以下任务:

0 投票
1 回答
779 浏览

.net - LINQ to SQL IsDiscriminator 列不能继承吗?

我正在设计我的数据库和 LINQ To SQL ASP.NET Web 应用程序。

想象一下,我有两种类型的页面:普通页面和根页面。有些页面是根。有些页面不是。

我有一个 Page 数据库表和一个 RootPage 数据库表:

我认为如果在我的 DBML 文件中设置 IsRoot 列的 IsDiscriminator 属性,那么我的 RootPage 类将继承 Page 类。

我希望能够在我的代码中这样工作:

或者像这样:

LINQ to SQL IsDiscriminator 列可以为空还是假?这行得通吗?

0 投票
13 回答
4831 浏览

java - 在 Java 中作弊单继承?

我听说有一种方法可以欺骗单继承并在 Java 中实现多继承。有谁知道如何实现这个(不使用接口)?

只是出于好奇;-)

0 投票
14 回答
5420 浏览

oop - 应始终禁止受保护的属性吗?

我很少使用继承,但是当我这样做时,我从不使用受保护的属性,因为我认为它破坏了继承类的封装。

你使用受保护的属性吗?你用它们做什么?

0 投票
10 回答
1518 浏览

c# - 通过向下转换继承树在 C# 中“更宽松”键入

我想问的问题是:

从抽象类内部向下转换继承树(即朝向更专业的类)是可以原谅的,甚至是一件好事,还是它总是一个糟糕的选择,有更好的选择?

现在,为什么我认为它可以用于良好的例子。

我最近在 C# 中从 BitTorrent 协议实现了 Bencoding 。一个足够简单的问题,如何表示数据。我选择这样做,

我们有一个abstract BItem类,它提供了一些基本功能,包括static BItem Decode(string)用于将 Bencoded 字符串解码为必要结构的类。

还有四个派生类,、BString和,表示要编码的四种不同数据类型。现在,这是棘手的部分。和have和accessors 分别允许访问这些数据类型的类似数组的质量。BIntegerBListBDictionaryBListBDictionarythis[int]this[string]

潜在的可怕部分现在来了:

好吧,你明白了……哎呀,这对眼睛来说很难,更不用说大脑了。所以,我在抽象类中引入了一些额外的东西:

现在我们可以将旧代码重写为:

哇,嘿presto,更具可读性的代码。但是我是否只是为了将子类的知识暗示到抽象类中而出卖了我的一部分灵魂?

编辑:作为对一些答案的回应,你完全偏离了这个特定问题的轨道,因为结构是可变的,例如我的例子torrent["info"]["files"][0]["length"]是有效的,但也是如此torrent["announce-list"][0][0],两者都将在 90% 的 torrent 文件中在那里。泛型不是要走的路,至少有这个问题:(。点击我链接的规范,它只有 4 个小点。

0 投票
6 回答
602 浏览

.net - .NET 抽象类

我正在设计一个网站导航层次结构。它是一棵节点树。

大多数节点都是页面。一些节点是链接(想想 Windows 中的快捷方式)。

大多数页面都包含 HTML 内容。一些执行代码。

我想将这些表示为这个类和抽象(MustInherit)类的集合......

类图

这是我要存储所有这些的数据库表……

数据库表 http://img178.imageshack.us/img178/8573/nodetablefm8.gif

这就是我难过的地方。PageNodes 可能是也可能不是根。

我应该如何处理根类?

类图

我不想拥有所有四个……

  • HtmlPageNode
  • 代码页节点
  • Html页面节点
  • 代码页面节点

我希望 HtmlPageNode 和 CodePageNode 类从 PageNode从 RootPageNode 继承。那可能吗?


澄清:有多个根节点,根可能有父节点。每个都是唯一具有不同样式的子树的根。想想不同的、颜色编码的部门。(也许 root 是一个糟糕的名称选择。建议?)


更新:关于“根”名称......
我问过:是否有对应于子树的节点的特定名称?

0 投票
4 回答
1345 浏览

c++ - C++派生类问题

我正在用 C++ 制作游戏,但我的派生类有问题。我有一个名为 GameScreen 的基类,它有一个没有语句的虚拟 void draw() 函数。我还有一个名为 MenuScreen 的派生类,它也有一个虚拟 void draw() 函数和一个来自 MenuScreen 的名为 TestMenu 的派生类,它也有一个 void draw() 函数。在我的程序中,我有一个 GameScreen 列表,我有一个 GameScreen 迭代器通过调用每个 GameScreens draw() 函数。

问题是我在 GameScreen 列表中放置了一个 TestMenu 对象。不是迭代器调用 TestMenu 的 draw() 函数,而是调用 GameScreen 类的 draw() 函数。有谁知道我如何调用 TestMenu 的 draw() 函数而不是 GameScreen 中的函数。

这是功能:

这是我的课程的副本:

0 投票
9 回答
16864 浏览

c# - 在 C# 中继承事件处理程序

我有点把自己逼到了一个角落。

我有一系列从父级继承的用户控件,其中包含几个方法和事件来简化事情,因此我不必编写几行几乎相同的代码。像你一样做。父级不包含其他控件。

我想要做的只是在父 UserControl 中有一个事件处理程序,它会执行只有父控件才能执行的操作(即,有条件地调用事件,因为事件在父控件中定义)。然后我将这个事件处理程序连接到我的子控件中的所有输入框,子控件将整理解析输入并告诉父控件是否抛出该事件的任务。漂亮干净,没有重复的复制粘贴代码(对我来说总是会导致错误)。

这是我的问题。Visual Studio 认为我太聪明了一半,并警告我“方法'CheckReadiness' [父级中的事件处理程序] 不能成为事件的方法,因为该类派生的类已经定义了该方法。” 是的,Visual Studio,这就是重点。我想要一个事件处理程序,它只处理子类抛出的事件,它唯一的工作是让我能够在不编写任何代码的情况下连接子类。我不需要那些额外的处理程序——当孩子们处理用户输入时,我需要的所有功能自然会被调用。

我不确定为什么 Visual Studio 现在开始抱怨这个(因为它让我以前这样做过),而且我不知道如何让它消失。最好,我想这样做,而不必定义一个只调用 CheckReadiness 的方法。是什么导致了这个警告,是什么导致它在一个小时前没有出现的时候出现,我怎样才能让它消失而不诉诸于在所有子类中制作小处理程序?

0 投票
11 回答
101309 浏览

php - PHP中的多重继承

我正在寻找一种好的、干净的方法来解决 PHP5 仍然不支持多重继承这一事实。这是类层次结构:

Message
-- TextMessage
-------- InvitationTextMessage
-- EmailMessage
-------- InvitationEmailMessage

这两种类型的 Invitation* 课程有很多共同点;我很想有一个共同的父类,邀请,他们都会继承。不幸的是,它们与当前的祖先也有很多共同点……TextMessage 和EmailMessage。这里是多重继承的经典愿望。

解决问题的最轻量级方法是什么?

谢谢!