在 Java 中,如何从覆盖 class 的实例中调用覆盖 class 的方法

In Java, how do I call the method of a overridden class from an instance of the overriding class

我是 Java 继承的新手。请查看我的 parent class 名为 Term:

的代码
public class Term {

  public String value;
  public void setValue(String value)
  {
    this.value=value;
  }

  public String getValue()
  {
    return value;
  }

}

现在 class OperatorTerm 扩展了 Term

public class OperatorTerm extends Term {

  public static Operator type;

  public static boolean equals(String value)
  {
    String regex="(\++)|(-+)|\*|/";
    boolean isOperand=value.matches(regex);
    return isOperand;
  }

  public void assignType(String value)
  {
    if(value.equals("+"))
      type=Operator.ADD;
    else if(value.equals("-"))
      type=Operator.SUBTRACT;
    else if(value.equals("*"))
      type=Operator.MULTIPLY;
    else if(value.equals("/"))
      type=Operator.DIVIDE;
    else if(value.equals("++"))
      type=Operator.INCREMENT;
    else
      type=Operator.DECREMENT;
    }
  }

我正在另一个 class:

中创建这样的 OperatorTerm object
public static Term getTerm(String termValue)
{
  Term newTerm=null;
  if(ValueTerm.equals(termValue))
    newTerm=new ValueTerm();
  else if(ReferenceTerm.equals(termValue))
    newTerm=new ReferenceTerm();
  else if(OperatorTerm.equals(termValue))
  {
    newTerm=new OperatorTerm();
  }
  return newTerm;
}

在最后的 elseif 语句中,我想执行以下操作 newTerm.assignType。 assignType 是 OperatorTerm class 中的一种方法,但它不存在于 Term class 中。我无法这样做,我想知道是否有人可以指导我如何使用 newTerm 访问 OperatorTerm class

的方法

我正在使用

创建覆盖 class 的 object
    else if(OperatorTerm.equals(termValue))
    {
        OperatorTerm newOperatorTerm = new OperatorTerm();
        newOperatorTerm.assignType(...);
        newTerm = newOperatorTerm;
    }

如果您只需要在 getTerm 方法中调用方法 "newTerm.assignType",也许您只需要 return and/or 创建适当的子对象:

public static Term getTerm(String termValue)
    {
        // Term newTerm=null;
        if(ValueTerm.equals(termValue))
            return new ValueTerm();
        else if(ReferenceTerm.equals(termValue))
            return new ReferenceTerm();
        else if(OperatorTerm.equals(termValue))
        {
            OperatorTerm newTerm=new OperatorTerm();
            newTerm.assignType("+");
            return newTerm;
        }
        // return newTerm;
    }

通常,如果您使用的对象是父对象,则不能使用在扩展 类 中创建的方法。

希望我的回答对你想做的事情有用。

else if(OperatorTerm.equals(termValue))
{
    newTerm = new Operatorterm();
    ((OperatorTerm) newTerm).assignType(value);
}

就个人而言,我会这样做

else if(OperatorTerm.equals(termValue))
{
    OperatorTerm ot = new OperatorTerm();
    ot.assignType(value);
    return ot;
}

并为其他人做同样的事情。