java中的通用继承

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继承.

Ezk*_*zku 5

没有.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实例.然后可以自由地为物理部分添加自己的处理.