问题标签 [subclassing]

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 投票
5 回答
2215 浏览

c++ - 如何在 C++ 中将对象的类更改为其当前类的子类?

我有一个指向基类的指针数组,这样我就可以使这些指针指向基类的(不同的)子类,但仍与它们交互。(实际上只有几个方法我做了虚拟和重载)我想知道我是否可以避免使用指针,而只是制作一个基类的数组,但有一些方法可以将类设置为我的子类选择。我知道那里必须有一些东西指定类,因为它需要使用它来查找虚拟方法的函数指针。顺便说一句,子类都具有相同的 ivars 和布局。

注意:设计实际上是基于使用模板参数而不是变量,由于性能提高,所以抽象基类实际上只是子类的接口,除了它们的编译代码之外,它们都是相同的。

谢谢

编辑:所有子类(如果需要的话)基类具有相同的布局/大小

除此之外,策略模式会很好,但它添加了一个指向类的指针,而我试图避免的只是一种尊重。

简单来说,我想做的是

显然它要复杂得多,但就课程/任何事情而言,这几乎就是我所寻找的。顺便说一句,这可能是一种语言功能。

0 投票
1 回答
311 浏览

iphone - 从子类 UIPasteboard 选择中获取 NSRange

我想知道是否有某种方法可以将 UIPasteboard 子类化以获得选择行为,但不能获得“剪切、复制和粘贴”选项。除此之外,是否有一些我可以订阅的通知一旦被选中就会返回所选文本正文的 NSRange?

谢谢你的帮助!

编辑:我想使用这个子类来允许用户指示他们想要运行函数的区域。

0 投票
3 回答
1691 浏览

java - 哪种 Java 编程实践更好:堆叠枚举和枚举构造函数,还是子类化?

给定有限数量的种类不同的项目,是用堆叠的枚举和枚举构造函数来表示它们,还是对它们进行子类化更好?还是有更好的方法?

为了给你一些背景信息,在我的小型 RPG 程序中(讽刺的是,这应该很简单),一个角色在他或她的库存中有不同种类的物品。物品因种类、用途和效果而异。

例如,一个物品栏是一个名为 Gremlin 的法术卷轴,它可以调整实用属性。另一件物品可能是一把名为 Mort 的剑,用于战斗并造成伤害。

在我的 RPG 代码中,我现在尝试了两种表示库存项目的方法。一种方法是子类化(例如,InventoryItem -> Spell -> AdjustingAttributes;InventoryItem -> Weapon -> Sword)并在需要时实例化每个子类,并分配诸如 Gremlin 和 Mort 之类的名称之类的值。

另一种方法是堆叠枚举和枚举构造函数。例如,我为 itemCategory 和 itemSpellTypes 和 itemWeaponTypes 创建了枚举,而 InventoryItem 枚举是这样的:

有没有比这两种方法更好的 Java 编程实践?或者如果这些是唯一的方法,那么两者中哪一个更好?提前感谢您的建议。

0 投票
3 回答
1943 浏览

iphone - 来自图像的自定义 UIToolBar

我需要创建一个使用图像作为背景的 UIToolbar 对象。大多数按钮也是图像和矩形。但是,一个按钮是圆形的,与工具栏重叠,就像 Windows 任务栏上的“开始”按钮一样。见下文。

我知道我需要继承 UIToolbar 来为工具栏绘制图像——我想。如果是这样,是否有人有示例代码显示如何执行此操作?

此外,有人对如何实现更大的圆形按钮有任何想法吗?我正在为此考虑另一个自定义子类,但不确定是否有更简单的方法。

我可以让艺术人员无论如何都需要切割图像,我确信圆形按钮需要被切割一些。

任何想法或示例代码?

替代文字 http://iphone.sophtware.com/toolbar.png

0 投票
1 回答
1061 浏览

iphone - 覆盖的three20 TTDefaultStyleSheet 样式不起作用

我最近将 three20 集成到我的应用程序中,并试图覆盖 TTWebController 中的默认工具栏颜色。

在 TTWebController.m:118 我看到这是设置工具栏的 tintColor:

所以我创建了自己的样式表,它继承了 TTDefaultStyleSheet 并覆盖了 toolbarTintColor

FooStyleSheet.h:

FooStyleSheet.m:

在我的应用程序中:didFinishLaunchingWithOptions:我设置了我的默认样式表

但是当我查看 TTWebController 时,它不会继承我的 tintColor。如果我直接编辑 TTDefaultStyleSheet.m :

它按预期工作。

有什么我忽略的东西阻止了我的风格被接受吗?

谢谢,
-规范

0 投票
3 回答
5379 浏览

iphone - 子类化 UINavigationBar ...如何在 UINavigationController 中使用它?

我想继承 UINavigationBar(设置自定义背景图像和文本颜色)并将其用于我应用程序中的所有导航栏。查看 UINavigationController 的 API 文档,看起来 navigationBar 是只读的:

@property(非原子,只读) UINavigationBar *navigationBar

有没有办法在我的 UIViewControllers 中实际使用自定义 UINavigationBar?我知道其他应用已经做了自定义导航栏,比如 flickr:

http://img.skitch.com/20100520-bpxjaca11h5xne5yakjdc2m6xx.png

这是我的 UINavigationBar 子类:

实施

我知道我可以使用一个类别来更改背景图片,但我仍然希望能够设置导航栏标题的文本颜色

有什么建议或其他解决方案吗?我基本上想创建一个浅色背景和深色文本,如 Flickr 的应用导航栏

0 投票
1 回答
784 浏览

iphone - 覆盖navigationController的navigationBar属性的最佳点

我正在覆盖以用我自己的子类的实例UINavigationController替换默认属性。所以我尝试了类似的东西navigationBarUINavigationBar

在我的-initWithRootViewController:. 但这并没有像我预期的那样成功。仍然显示默认值navigationBar

那么覆盖的最佳点是navigationBar什么?

提前致谢
-f

0 投票
1 回答
2027 浏览

java - 如何正确扩展 Java FilterOutputStream 类?

我想大致监控文件上传的进度。我知道我可以覆盖 MultipartEntity 并使 writeTo(OutputStream out) 方法写入我为包装默认 InputStream 而创建的 FilterOutputStream 类。有关我如何做到这一点的完整详细信息,请参阅我的答案here

然而,经过仔细检查,这会将每个字节发送两次!我去文档看看发生了什么。看起来 FilterOutputStream 的write(byte[], int, int)方法只是在循环中调用 FilterOutputStream 的 write(byte) 方法。它推荐子类以提供更有效的方法。我假设这涉及调用底层 OutputStream 的 write(byte[], int, int) 并希望底层 OutputStream 有更好的将字节推送到流上的方法(文档推荐的 OutputStream 子类覆盖此方法并做得更​​好而不是简单地循环 OutputStream#write(byte) 方法)。

这就是我发现自己陷入困境的地方。我不能保证 MultipartEntity#writeTo(OutputStream) 总是会导致调用 OutputStream.write(byte[],int,int),所以如果我计算那里发送的字节数,那么我可能会错过一些使用发送的字节数写(字节)方法。但是,我不能算入 write(byte) 方法,因为 OutputStream.write(byte[],int,int) 方法可能永远不会调用 write(byte) 方法。

一个答案是在我的子类的 write(byte[],int,int) 方法中调用 super.write(byte[],int,int) 。然后,我知道这将简单地循环 write(byte) 方法,一次写入一个字节。然后我可以计算在 write(byte) 方法中写入的所有字节。但是,这是低效的,文档直接建议不要这样做。我确信 OutputStream 的一些子类设法一次将多个字节写入流,所以不利用这个优势是愚蠢的。

那么,如何正确覆盖 FilterOutputStream 以既高效又计算所有发送的字节数?

对不起,如果这很长,我已经把它变成了一个维基,以防有人能比我更好地描述这个问题。

0 投票
1 回答
2506 浏览

objective-c - 子类化 UIImageView - 动画图像不显示或出现

我正在尝试对 UIImageView 进行子类化,以便创建一个播放不同动画的子类实例,具体取决于我发送的变量。我用于播放特定 2 帧动画的初始代码(在子类化之前)看起来像这样。'bubbleAnimationTemp' 只是我在标题中声明的 UIImageView 对象:

所以然后我尝试像这样子类化 UIImageView :

@结尾

如您所见,我尝试了两种不同的方法来创建 UIImages 以添加到 UIImageView。但我遇到的问题是动画播放时没有任何显示。

我也尝试简单地将第一个方法的代码复制到这个子类中,所以过程基本相同,但仍然没有出现。

我已经检查了有关子类化 UIImageView 的注释的文档,但似乎没有任何我遗漏的东西。我确保将我放置在 Interface Builder 中的“UIImageView”对象更改为“BubbleAnimation”对象,所以不是那样的。

任何关于为什么什么都没有出现的帮助将不胜感激。一如既往的感谢!

迈克尔

****************更新****************

好吧,多亏了 Kalle 在下面的建议,这一切都已解决。但是,现在类似的问题再次发生,我想知道我做错了什么。

基本上,我希望在动画的旁边有一颗出现在思想泡泡中的小心脏。我在 BubbleAnimation 类中添加了一个 UIImage,如下所示:

并像往常一样在实现中综合它。然后我在 setMood 方法中将心设置为正确的颜色:

在 IB 中,我添加了一个隐藏的 UIImageView 对象并将其链接到我的 ViewController 中的一个 UIImageView IBOutlet,名为bubbleHeart。当思想气泡出现时,我使用以下代码显示动画和心脏:

问题是,动画出现了,但小心脏没有。我尝试了各种方法 - 我在 BubbleAnimation 类中创建了 UIImageView,而不是使用 UIImage,并尝试以各种不同的方式对其进行初始化,但没有任何乐趣。如果我调用类似的东西,self.bubbleHeart = [[UIImageView alloc] initWithImage:bubbleAnimation.heart];那么大概我正在重新初始化变量,这样它就不起作用了。知道为什么它没有出现吗?

非常感谢!

迈克尔

0 投票
0 回答
5565 浏览

c# - Fluent nHibernate - DiscriminateSubClassesOnColumn 与多个表?

几天来,我一直试图围绕子类和在 Fluent nHibernate 中加入子类而没有取得任何进展。我查看了 wiki,但它似乎没有给我足够的信息,并且谷歌搜索返回了使用折旧代码或看似无关的旧结果。

如果可能的话,我只想要一个简单的例子

我有四个看起来像这样的表:

所以 Animal 表有一个引用 AnimalType 表的 FK,一个只包含 1 个 Id 的查找表,作为测试,

1 = 爬行动物

这个想法是 AnimalTypeId 列是我的区分我的子类的鉴别器列,并且每个动物表(爬行动物)都有 FK 主键,它们根据 AnimalTypeId 从 Animal 表中引用 Id。

所以我的 C# 类看起来像这样

如何将其映射为每个表的子类?

这是我当前的映射。

它几乎可以工作,只是似乎没有发现子类来自不同的表。HBM 映射如下。

编辑:之前存在重复实体的问题。解决方案在下一条评论中链接。