![](/img/trans.png)
[英]In Java, how do I call a base class's method from the overriding method in a derived class?
[英]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.