java中的泛型继承 在C++中,我们可以写: #include <iostream> class Base1 { public: void test() { std::cout << "Base 1" << std::endl; } }; class Base2 { public: void test() { std::cout << "Base 2" << std::endl; } }; template<class T> class Derived: public T { }; int main() { Derived<Base1> d1; Derived<Base2> d2; d1.test(); d2.test(); } #包括 基类1 { public:void test(){std::cout
否。C++的模板比Java的泛型更重要。Java中的泛型仅用于确保在编译时正确键入,并且不存在于生成的字节码中-这称为 在我的场景中,我有两个子类,Sprite和AnimatedSprite(这是Sprite的一个子类)。下一步是PhysicalSprite,它将物理添加到Sprite中,但我希望它能够从Sprite和AnimatedSprite继承java中的泛型继承 在C++中,我们可以写: #include <iostream> class Base1 { public: void test() { std::cout << "Base 1" << std::endl; } }; class Base2 { public: void test() { std::cout << "Base 2" << std::endl; } }; template<class T> class Derived: public T { }; int main() { Derived<Base1> d1; Derived<Base2> d2; d1.test(); d2.test(); } #包括 基类1 { public:void test(){std::cout,java,c++,templates,generics,Java,C++,Templates,Generics,否。C++的模板比Java的泛型更重要。Java中的泛型仅用于确保在编译时正确键入,并且不存在于生成的字节码中-这称为 在我的场景中,我有两个子类,Sprite和AnimatedSprite(这是Sprite的一个子类)。下一步是PhysicalSprite,它将物理添加到Sprite中,但我希望它能够从Sprite和AnimatedSprite继承 继承不是代码重用的唯一形式。这个用例也可以用其他模式来处理,比如简单。考虑一些类似于以下的内容: interface Sprite { ... }
继承不是代码重用的唯一形式。这个用例也可以用其他模式来处理,比如简单。考虑一些类似于以下的内容:
interface Sprite { ... }
class StaticSprite implements Sprite { ... }
class AnimatedSprite implements Sprite { ... }
class PhysicalSprite implements Sprite, Physics {
PhysicalSprite(Sprite inner) { ... }
...
}
在这种情况下,PhysicalSprite会将Sprite部分委托给构造函数中提供的某些Sprite实例。然后,它可以自由地为物理部分添加自己的处理。不,不是以完全相同的方式。但是,如果你告诉我们你到底想做什么,我很确定会有一些优雅的方法来完成。我只是不认为有任何必要对或示例中的模板/泛型。
特别是,看起来
Base1
和Base2
可能受益于方法test
Hm的公共接口。您需要吗?唉,不需要
<> P>不同于C++的,它可以被认为是为模板的每个实例化发出不同的类定义,泛型类型的所有实例化在java中共享相同的运行时类,因此具有相同的方法定义。泛型(在爪哇中)是编译时,而不是在运行时跟踪。
因此,Java语言规范明确地将类型参数指定为超类或实现的接口:
普通类声明中的可选extends子句指定当前类的直接超类
超级:扩展类类型
其中ClassType是限定或非限定的类名(带有可选的类型参数)
解决办法
计算和概念上:+ 1,我不知道C++模板能做到这一点(这可以用来实现Scala中动态混合合成的效果):@丢失faktor:CRTP的谷歌pattern@Armen这不是一个CRTP模式的例子。CRTP有一个一般的结构:代码> A类:B<代码>,这不是OP代码的例子。@ MISSIGO FAKOTRO:我想Armen的观点是,如果你想要C++中的MIXIN,CRTP就是这样做的,而不是这个。我不知道CRTP是否真的模仿S。你说的卡拉,自从“混血”对不同的人来说,不同的东西是不同的。但是我不认为Armen声称这是CRTP。@ Maskfkor正如你所说的,你不知道C++模板能做到这一点,我想你可以读到关于CRTP的有趣的东西,我知道这与OP的问题不太相关。似乎已经有了一些建议(也许很快就会有一些比我更有经验的人来帮忙)。