在 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;
}
并为其他人做同样的事情。
我是 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 objectpublic 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;
}
并为其他人做同样的事情。