Java谜语:静态绑定

时间:2015-06-13 13:55:09

标签: java class binding static-methods

我已经提供了课程C和界面A,我不允许对其进行任何更改。我应该编写课程B,以便代码始终输出success!

在for循环内的类C的代码中,我无法理解两件事。

1)我不明白调用哪种条形方法。

2)到达何时返回?

我是否应该更改B的实施以使其发挥作用?

public interface A {

    public String bar();
}



public class C extends B {

    public int foo = 100;

    public C(String s) {
        super(s);
    }

    @Override
    public void barbar() {
        foo++;
    }

    public static void main(String[] args) {
        String input = args[0];
        StringBuilder builder = new StringBuilder(input);
        C c = new C(input); //c=args[0]
        B b = c; //b=args[0]
        A a = b; //a=args[0]

        for (int i = 0; i < args.length; i++) {
            if (!builder.toString().equals(a.bar())) { //which bar is called?
                return; //where does it return to? does it exist the for loop?
            }
            builder.append(input);
            c.foo++;
        }

        if (c.foo - 99 == b.foo.length() / input.length()) {
            System.out.println("success!");
        }
    }
}


public class B implements A {



    public String foo;

    public B(String s) {
        this.foo=s;
    }

    public void barbar() {
        // TODO Auto-generated method stub

    }

    @Override
    public String bar() {
        return this.foo;
    }

}

1 个答案:

答案 0 :(得分:1)

    bar()中定义的
  1. class B被称为当然。如果您认为来自interface A的方法被调用,我必须告诉您来自界面的方法永远不会 CALLED 。由于接口只有方法声明(除非它是default方法),实现非抽象类必须定义。并执行行return this.foo

  2. 来自return方法的
  3. main语句结束了该程序。它返回到JVM,然后返回到操作系统。