我已经提供了课程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;
}
}
答案 0 :(得分:1)
bar()
中定义的 class B
被称为当然。如果您认为来自interface A
的方法被调用,我必须告诉您来自界面的方法永远不会 CALLED 。由于接口只有方法声明(除非它是default
方法),实现非抽象类必须定义。并执行行return this.foo
。
return
方法的 main
语句结束了该程序。它返回到JVM,然后返回到操作系统。