簡體   English   中英

在Java中,如何從重寫類的實例調用重寫類的方法

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

我是Java繼承的新手。 請查看名為Term的父類的代碼:

public class Term {

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

  public String getValue()
  {
    return value;
  }

}

現在,類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;
    }
  }

我在另一個類中創建一個這樣的OperatorTerm對象:

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類中的一個方法,但它不存在於Term類中。 我無法這樣做,我想知道是否有人可以指導我如何使用newTerm來訪問OperatorTerm類的方法

我正在創建一個被覆蓋的類的對象

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

如果只需要在getTerm方法中調用方法“newTerm.assignType”,可能只需要返回和/或創建正確的子對象:

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;
}

並為其他人做同樣的事情。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM