我是OOP的新手,我希望在JAVA - Android中使用扩展类中的函数,但参数数量不同。
据我记得在C#中我可以做到以下几点:
主类
class Command {
protected int NrTokens
protected String cmd
protected String[] AnswerTokens
Command(String[] Tokens) {
AnswerTokens = Tokens
}
virtual int Parse()
virtual int Send()
}
使用虚拟方法如下
class Command1 : Command{
protected int NrTokens=2;
protected String cmd="abc";
protected String AnswerTokens;
//
class ComandPing():Command(AnswerTokens);
public void Parse(){
if (AnswerTokens.size != NrTokens)
throw exception
//show on screen the status
}
Send() {
//todo
}
}
我在这样尝试使用Java
abstract class Command {
protected int NrTokens;
protected String cmd;
protected String[] AnswerTokens;
public void SetAnswerTokens(String Tokens[]){
AnswerTokens = Tokens;
}
abstract void Parse();
abstract void Send();
}
并且
public class Command1 extends Command {
protected int NrTokens=2;
protected String cmd="PING";
protected String AnswerTokens;
public Command1(String Tokens[]){
}
@Override
void Parse(String b){
if (AnswerTokens.length()!= NrTokens)
{
}
}
@Override
void Send(int a) {
}
问题是,如果我使用参数,它不是@Overriding
。我只需要来自某些子类的参数,比如Command1,Command10,但不需要来自Command5,我需要调用不带参数的Send和Parse。
你能帮助我吗?
答案 0 :(得分:0)
如果要覆盖Java中的方法,则不能更改参数计数,类型或顺序。
如果某些子类型需要一个且需要多态,那么你肯定需要一个参数。
我建议使用包装类。 您可以使用新的Java 8 Optional类型或Google Guavas Optional类型。或者,如果可以提供额外的好处,您可以自己写一个。
对于Java 8可选请参阅:https://docs.oracle.com/javase/8/docs/api/java/util/Optional.html
对于Guava可选请参阅:https://code.google.com/p/guava-libraries/wiki/UsingAndAvoidingNullExplained
Null对象模式也可能对您有用。基本思想是使用一个可能代表空参数的Object(类似于空列表而不是null)。