then
如何通过减少代码重复来改进此代码? 答案说:
Agent1必须从Agent2继承,Agent1将使用actOn(o)执行actOn(o,i),并删除重复功能......
但在我看来,以下答案看起来是正确的,但错误,为什么:
" Agent2必须从Agent1继承, Agent2 将使用actOn(o,i)执行actOn(o),并删除重复功能"
编辑:大胆 Agent2
答案 0 :(得分:0)
第一个选项:
Agent1必须从Agent2继承,Agent1将执行actOn(o,i) 使用actOn(o),还删除重复函数.....
可能的实施:
public abstract class Agent1 extends Agent2{
public void actOn(Object o, int i){
// do something with i
actOn(o);
}
public abstract void actOn(Object o);
}
public abstract class Agent2 {
public abstract void actOn(Object o, int i);
public void repeat(Object o, int i) {
for (int j = 1; j <= i; j++) {
actOn(o, j);
}
}
}
第二个选项:
&#34; Agent2必须从Agent1继承,Agent1将执行actOn(o) 使用actOn(o,i),并删除重复功能&#34;
Agent1在执行actOn(o,i)
时无法使用actOn(o)
,因为如果Agent2 extends
Agent1,那么Agent2将是从Agent1继承的(而不是反之的),因此actOn(o,i)
赢了&# 39;代理商1可以使用。
第二种选择是错误的,第一种选择是正确的。
第二个选项 编辑:
&#34; Agent2必须从Agent1继承, Agent2 将执行actOn(o) 使用actOn(o,i),并删除重复功能&#34;
实施尝试:
public abstract class Agent2 extends Agent1{
public void actOn(Object o){
actOn(o, i); // what is i ???
}
public abstract void actOn(Object o, int i);
}
public abstract class Agent1 {
public abstract void actOn(Object o);
public void repeat(Object o, int i) {
for (int j = 1; j <= i; j++) {
actOn(o);
}
}
}
正如您所看到的,除非您先声明并初始化actOn(o, i)
,否则无法从Agent2类中的actOn(o)
调用i
。如果练习没有对创建额外变量设置任何限制,那么我就无法看到第二个答案有什么问题。