![]() |
1
18
不,这是不可能的,并且您这样做的意图是一个很好的提示,说明您的类层次结构中存在缺陷。 解决方法:更改类层次结构,例如:
|
![]() |
2
7
也许组合而不是继承是您想要的,也就是说,将一个“基类”对象作为成员,并且只实现您需要的接口,将任何需要的方法转发给成员。 |
![]() |
3
3
我同意在Java中不可能的其他答案。 其他的答案进一步表明它在你的设计中显示了一个缺陷。 虽然我同意他们的观点,但我只是公平地指出,一些著名的OO专家(尤其是Bertrand Meyer)不同意我们的观点,并认为应该允许这样的设计。 其他OO继承模型(特别是Meyer的Eiffel编程语言)确实支持您正在寻找的“可用性或类型更改”(cat)特性。 |
![]() |
4
2
这是不可能的,这样做会违反隐含的IS——儿童阶级和家长阶级之间的关系。你为什么要这样做? |
![]() |
5
2
我认为您不能“不加修饰”它,但您可以检查它是否是父类的实例。接口是你的吗?如果是这样,您可以扩展它以包含一个语义为“isObjectDerived”的方法,如果类只从对象派生,则返回true。因为您正在编写类,所以只需在父类中实现它,如果对象是类父对象,则返回true,否则返回false。 通过检查当前类的超类并确保它是对象,您还可以对反射进行此操作。我可能会这样做,因为实现类不会说谎。你可能想看看 tutorial 我发现Java中的反射。 [编辑]总的来说,我同意在合理的设计中这似乎是不必要的,但可以做到。 |
![]() |
6
1
由于OOP多态性的基础是继承,它表示一种IS—A关系—您的问题似乎请求一种方法来重新定义“IS”关系为“IS”关系为“IS—NOT”关系。 那不行。 回到一些介绍性的面向对象的文本或在线材料,研究面向对象的含义:多态性、封装和标识。
如果你想要这样的情况,那么用“c”编程。不要乱来,假装用OOP语言特性编写OOP代码。只需使用结构来保存数据。让工会无处不在。放弃使用打字。 您的程序可能不会可靠地工作,但您将能够绕过任何限制,如Java和C++语言,使程序更可靠,更容易阅读,更容易编写/修改。 在像smaltalk或python这样的动态编程语言中,基本上可以在运行时撕掉蝴蝶的翅膀。但只能通过更改/破坏对象的类型。 这样做不会给你带来任何好处。有一些编码/设计技术和设计模式可以让您在完成之后获得任何“好”的结果,这与此类似。 最好的方法是,你想一想你在你的应用程序中到底要做什么,然后试着用合理的技术找到最安全/最简单的方法来完成它。 |
![]() |
7
0
我认为您应该把这个问题作为一个明确的迹象,表明您的接口和类设计有缺陷。即使你可以用Java做(我认为你不能),你也不应该这样做。 如何重新分解parentclass,使someInterface实现独立于childclass中需要的实现。也许您需要一个用于ParentClass和ChildClass的公共基类。 |
![]() |
8
0
我不明白这是怎样的练习,但是你 能够 使用Shigeru Chiba等人创建的优秀包Javassist动态地更改类。使用它,您可以从类中添加和删除特性,然后使用这些类的实例而不另存为类文件。 对其他人来说,充满活力、有趣且完全令人困惑。小心使用是我的建议,但是一定要好好玩玩它,因为它在我看来会让你成为一个更好的程序员。 (我相信ASM也有类似的工作方式,但到目前为止我还没有尝试过。它似乎是非常流行的AMAM非Java语言创建者在JVM上工作,所以它可能是好的。 |
![]() |
9
-1
也许你有一个特定的案例,可以设计出更好的解决方案,但是对于一般的案例,你需要一些黑色魔法。最终 Javassist 可以用来“黑客”你的物品,但我不太确定。 |
|
user29759326 · 如何返回递归函数中的最后一个值? 7 月前 |
|
malife89 · 将java中的字符串读取为正确的日期格式 7 月前 |
![]() |
Tim · 在java中,有没有更快的方法将字节数组写入文件? 8 月前 |
![]() |
rudraraj · java中未声明最终变量 8 月前 |
![]() |
Bala Ji · 以下BFS的实施效率如何? 8 月前 |