|
|
1
20
当然可以,但这很棘手,你真的应该考虑一下这是否是你想走的路。
无论如何,对于复杂的类来说,这是很棘手的,并且您可以使用静态导入(从java5开始)获得大部分功能。不过,这是求职面试和酒吧小测验的好问题;-) |
|
|
2
4
|
|
|
3
4
使用组合而不是继承往往是解决这一问题的方法。这实际上也对可测试性有很大帮助,所以这是一个很好的实践。 如果您只是想让您的类型像其他几种类型一样“表现”,那么您可以从任意多个接口继承;显然,您不能从中“借用”实现细节。 |
|
|
4
3
我相信Java不支持多重继承的根本原因与C#相同;所有对象最终都是从Object派生而来的,并且它具有指向同一基类的多个路径,这对编译器来说是不明确的。不明确==错误,因此编译器不允许。 相反,您可以通过委派来模拟多重继承。看见 this article 例如。 |
|
|
5
2
您可以通过使用java.lang.reflect.Proxy实例来欺骗它(我强调了一点)。 这实际上只允许您添加额外的接口,并在运行时将它们的调用委托给另一个实例。 作为一个指导和指导新开发人员的人,如果有人向我展示这样做的代码,我会感到震惊。反射是在加入之前你真正需要理解和充分理解Java的工具之一。我个人只做过一次,那就是制作一些我无法控制的代码,实现一些我无法管理的接口,实现一些其他我无法控制预期的代码(这是一个快速的破解,所以我不必编写和维护太多的粘合代码)。 |
|
|
6
1
使用
|
|
|
7
1
您需要小心区分接口继承(本质上是对提供特定设施的契约的继承)和实现继承(实现机制的继承)。 Java通过 机具 机制和你 可以 具有多接口继承。 实现继承是 延伸 机制,而你只有一个版本。你 真正地 需要多重实现继承吗?我敢打赌你不会,它充满了令人不快的后果,除非你是一个艾菲尔程序员。 |
|
|
8
1
您可能可以通过显式管理一组超类并使用反射在所有超类中搜索目标方法来“模拟”它。我不想在制作中这样做,但这可能是一个有趣的玩具程序。通过利用反射、动态创建类和用程序调用编译器,您可能会做很多奇怪的事情。 |
|
|
9
0
JAVA不支持多重继承。 你可以让它实现多个接口,有些人认为这是解决问题的一种方法。就我个人而言,我还没有使用多重继承,所以我不能真正理解它的吸引力。 通常,当有人建议在c#或JAVA中进行多重继承时,这是因为在c++中“他们可以”。我喜欢“你能做并不意味着你应该做”。作为c#&JAVA不支持它,为什么要强迫它做一些它没有设计好做的事情呢?这并不是说在某些独特的情况下,它是一种有效的技术,只是代码通常可以重构为不需要它。 |
|
|
10
0
我对此有了更多的思考,并意识到虽然动态代理可以工作(RMI(过去是这样工作的?)),但如果你真的想要这种功能,你最好看看使用AspectJ(eclipse.org/AspectJ)之类的东西的面向方面编程(AOP)。 通过这种方式,您可以在一个类中获得几个不同的方面,从而提供伪mixin继承,而不需要极其脆弱的继承继承体系。 正如其他人所指出的,想要/需要多重继承通常表明你没有从正确的角度来处理这个问题。首先,请记住GoF的“偏好组合而非继承”原则! |
|
|
11
0
曾努力将mixin引入Java。查看此链接: http://www.disi.unige.it/person/LagorioG/jam/ |
|
|
12
0
通过使用内部类,这也是C++有时更喜欢的: Inner Class Idiom 。 |
|
|
13
-1
是的,你可以说这是一个技巧,非常有趣的是,你不能将多个类继承到一个类,但可以将多个接口实现到一个类似的类
但请记住,您必须重写接口中声明的方法。 |
|
Fernando Chu · 一个变量有多个可能的类?[关闭] 1 年前 |
|
|
Amaterastis · 基类接受子类和内部子类的模板参数 1 年前 |
|
|
Rishab Negi · 这个关键字在抽象类中是如何工作的 1 年前 |
|
|
dEmigOd · 类层次结构中的运算符重载解析 1 年前 |
|
|
TableTopRug · 如何从Kotlin中的密封类继承? 1 年前 |
|
|
hasdrubal · 抽象基类函数指针python 2 年前 |
|
|
Josh · 通过反思访问孩子的财产 2 年前 |