我有一个Java难题我无法解决.鉴于以下三个类:
public class A1 {
protected boolean foo() {
return true;
}
}
Run Code Online (Sandbox Code Playgroud)
public class B1 extends A1 {
}
Run Code Online (Sandbox Code Playgroud)
public class C1 {
private static boolean secret = false;
public boolean foo() {
secret = !secret;
return secret;
}
public static void main(String[] args) {
C1 c = new C1();
for (int i = 0; i < args.length; i++) {
c.foo();
}
A1 a = new B1();
if (a.foo() == c.foo()) {
System.out.println("success!");
}
}
}
Run Code Online (Sandbox Code Playgroud)
我需要完成B1类,但是我想要,不需要更改类A1和/ C1或添加新文件,这样对于至少一个参数,C1将始终打印字符串"success!".
我认为我需要覆盖foo()类的方法A1,并通过从main函数C1中获取参数的数量来重写它,以获得正确的返回值.
我的问题是我不知道该怎么做.(请记住,我不允许通过写A1 a = new B1(args.length)而不是解决这个问题A1 a = new B1().这太容易了.)
任何有关如何做到这一点的建议,甚至完全不同的解决方案,将不胜感激!
既然secret是静态的,你可以创建一个新的C1并调用foo它,只需确保反转结果:
class B1 extends A1 {
public boolean foo() {
return !(new C1().foo());
}
}
Run Code Online (Sandbox Code Playgroud)