mon*_*res 5 c++ java generics templates
在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();
}
Run Code Online (Sandbox Code Playgroud)
获得模板继承.
可以使用泛型在java中完成相同的操作吗?
谢谢.
编辑:添加有关我的意图的更多信息
在我的场景中,我有两个子类,Sprite和AnimatedSprite(它是Sprite的子类).下一步是PhysicalSprite,它为精灵添加物理,但我希望它能够从Sprite和AnimatedSprite继承.
没有.C++的模板比Java的泛型强大得多.Java中的泛型仅用于确保在编译期间正确键入,并且不存在于生成的字节码中 - 这称为类型擦除.
在我的场景中,我有两个子类,Sprite和AnimatedSprite(它是Sprite的子类).下一步是PhysicalSprite,它为精灵添加物理,但我希望它能够从Sprite和AnimatedSprite继承.
继承不是代码重用的唯一形式.这个用例也可以用其他模式处理,例如简单的装饰.考虑类似于以下内容:
interface Sprite { ... }
class StaticSprite implements Sprite { ... }
class AnimatedSprite implements Sprite { ... }
class PhysicalSprite implements Sprite, Physics {
PhysicalSprite(Sprite inner) { ... }
...
}
Run Code Online (Sandbox Code Playgroud)
在这种情况下,PhysicalSprite会将Sprite部分委托给构造函数中提供的某个Sprite实例.然后可以自由地为物理部分添加自己的处理.
| 归档时间: |
|
| 查看次数: |
417 次 |
| 最近记录: |