Java难题访问main的参数而不传入它们

MrS*_*nic 6 java

我有一个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().这太容易了.)

任何有关如何做到这一点的建议,甚至完全不同的解决方案,将不胜感激!

Jor*_*nee 6

既然secret是静态的,你可以创建一个新的C1并调用foo它,只需确保反转结果:

class B1 extends A1 {

    public boolean foo() {
        return !(new C1().foo());
    }
}
Run Code Online (Sandbox Code Playgroud)