Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/393.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++;模板及;Java中的继承_Java_C++_Templates_Generics_Inheritance - Fatal编程技术网

C++;模板及;Java中的继承

C++;模板及;Java中的继承,java,c++,templates,generics,inheritance,Java,C++,Templates,Generics,Inheritance,我有以下C语言的课程++ ParentClass { virtual int MyMethod(); } class ExistingOne : ParentClass {...} class ExistingTwo : ParentClass {...} 现在我想创建一个类,它可以扩展现有的任何一个类,重写它们的两个方法,并在某些条件下调用现有类中的一个方法 在C++中,这是用下面的方法来完成的: template< class BaseTemplate > class

我有以下C语言的课程++

ParentClass
{
  virtual int MyMethod();
}

class ExistingOne : ParentClass {...}

class ExistingTwo : ParentClass {...}
现在我想创建一个类,它可以扩展现有的任何一个类,重写它们的两个方法,并在某些条件下调用现有类中的一个方法

在C++中,这是用下面的方法来完成的:

template< class BaseTemplate >
class MyClass : public BaseTemplate
{
  int MyMethod()
  {
    DoSomething();
    return BaseTemplate::MyMethod();
  }
}
template
类MyClass:公共基模板
{
int MyMethod()
{
DoSomething();
返回BaseTemplate::MyMethod();
}
}
这在Java中是如何实现的

到目前为止我有

public abstract class ParentClass
{
  public abstract int MyMethod();
}

public class ExistingOne extends ParentClass {...}

public class ExistingTwo extends ParentClass {...}

public class MyClass<T extends ParentClass>
{
  public int MyMethod()
  {
    DoSomething();
    return T.MyMethod();  //MyMethod must be statically defined? 
  }
}
公共抽象类父类
{
公共抽象int MyMethod();
}
公共类ExistingOne扩展父类{…}
公共类ExistingTwo扩展父类{…}
公共类MyClass
{
公共int-MyMethod()
{
DoSomething();
return T.MyMethod();//MyMethod必须是静态定义的吗?
}
}
最后,我不能修改“现有”或父类


那么这是正确的方法吗?在C++类定义中,如何解决静态需求?

< P>,<代码> MyClass <代码>扩展<代码> BaseTePoe< /代码>。在Java示例中,
MyClass
没有扩展
ParentClass
,因此得到了预期的问题

在Java中,只需将定义更改为:

public class MyClass<T extends ParentClass> extends ParentClass {
    @Override
    public int MyMethod() {
        DoSomething();
        return super.MyMethod();
    }
}

否则,使用泛型和扩展<代码> ParentClass <代码>根本没有任何意义。

java与“C++”AfAIR相比,对“泛型”类和接口的理解能力很差。ῥεῖ 这不是因为能力差,这只是错误的设计。@LuiggiMendoza,这只是一种观点。你说的很可能是真的…@πάνταῥεῖ 嗯,在我看来,你的观点更像是对Java的咆哮。如果这不是你的意图,请考虑删除评论或编辑相应的。@ LuiggiMendoza它不是真正的咆哮,而是我喜欢C++的java的原因之一。他们在不同的问题领域有自己的位置。我只是说,简单的元编程并不是java编程的优势之一(尽管这在java环境中根本不那么重要)。但是,调用super.MyMethod()会出现无法直接调用ParentClass类型的抽象方法MyMethod()的问题。除此之外,在C++中,调用的方法将不是模板的父方法。您在正确的轨道上,但是如果您使用上面的PARNENORE定义,则会有一些错误。考虑抛光吗?@ LuiggimimZa,所以MyC类将有一个T的实例,而不需要再扩展父类了?@ USE3581890是的,您可以移除它。除非在
ParentClass
中有可以在
MyClass
中使用的非抽象方法。
public class MyClass<T extends ParentClass> extends ParentClass {
    T t;
    public MyClass(T t) {
        this.t = t;
    }
    @Override
    public int MyMethod() {
        DoSomething();
        return t.MyMethod();
    }
}