我在期中有这个问题,我很难回答。 我不了解接口如何工作。有人可以给我解释一下吗? 问题是要像这样编写程序的输出:
输出行1
第2行输出
第3行输出
第4行输出
第5行输出
我已经尝试过计算程序,但仍然无法理解...
程序就在这里;
PolyMorph类:
public class PolyMorph{
public static void main(String[] args){
Worker w1 = new B(); // line #1
Worker w2 = new C(); // line #2
w2.collaborate(w1); // line #3
w1.collaborate(w2); // line #4
System.out.println("Who gets fired?"); // line #5
}
}
界面:
interface Worker {
public void collaborate(Worker worker);
public void snooze();
}
A类:
class A implements Worker{
private String name;
public A(){
this("New guy!");
}
public A (String s){
name = s;
System.out.println(name);
}
public void collaborate(Worker worker){
worker.snooze();
}
public void snooze(){
System.out.println("Zzzz");
}
}
B级:
class B extends A{
public B(){
System.out.println("This is B reporting");
}
public B(String s){
super(s);
}
public void snooze(){
System.out.println("Watch out for the boss!");
super.snooze();
}
}
C类:
class C extends B{
public C(){
System.out.println("It's C here!");
}
public void snooze(){
System.out.println("Do this till 5pm.");
}
public void collaborate(Worker w){
System.out.println("Try to work together...");
super.collaborate(w);
}
}
答案 0 :(得分:0)
在这里,在第1行和第2行,您需要了解动态多态性是如何工作的,以及构造函数的调用顺序。
由于Worker
接口是由类A
实现的,而类A
是由类B
和类C
继承的,因此可以创建类B
和类C
的对象,并带有Worker
接口的引用。因此,当创建类B
或类C
的对象时,将首先调用父类A
的构造函数,然后将执行子类构造函数< / p>
因此,在第1行的输出将是:
New guy!
This is B reporting
第2行的输出为:
New guy!
It's C here!
现在在第3行和第4行,您需要了解在 collaboration 方法中作为参数传递的对象是哪个,以及与哪个对象一起调用。
在第3行,collaboration
方法由类C
的对象调用,而类B
的对象作为参数。因此,将调用类collaboration
的{{1}}方法。但是,由于您将类C
的对象作为参数传递,因此,将根据类B
的行为进行进一步的调用。
现在,类B
中的collaboration
方法具有一条打印语句,然后将参数传递给父类(即类C
)的collaboration
。在您的情况下,类A
的对象将传递给类B
中的collaboration
方法。因此,在类A
的{{1}}方法中,调用了工作对象的collaboration
方法(本例中为类A
),现在控件将转到类snooze
的{{1}}方法,在那里将进一步执行。在类B
的{{1}}方法中,有一条print语句,并且调用了父类(即类snooze
)B
方法。
因此,第3行的输出将是:
snooze
在第4行,B
类的对象以参数A
的对象调用snooze
方法。
由于类Try to work together...
Watch out for the boss!
Zzzz
没有自己的collaboration
方法的实现,因此将调用父类(即类B
)的C
方法。在类B
的{{1}}方法中,调用了collaboration
的参数方法(它是类collaboration
的对象),因此输出为:
A
在第5行,输出是直接的:
collaboration
答案很具有描述性,请仔细阅读答案...