Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/377.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 无法理解程序的输出。接口_Java_Interface - Fatal编程技术网

Java 无法理解程序的输出。接口

Java 无法理解程序的输出。接口,java,interface,Java,Interface,我在期中考试时遇到过这个问题,我很难回答。 我不理解接口是如何工作的。有人能给我解释一下吗? 问题是这样写程序的输出: 输出线#1 输出线#2 输出线#3 输出线#4 输出线#5 我已经试过计算程序,但仍然无法理解 节目就在这里, 变形类: public class PolyMorph{ public static void main(String[] args){ Worker w1 = new B(); // line #1 Worker w2 = n

我在期中考试时遇到过这个问题,我很难回答。 我不理解接口是如何工作的。有人能给我解释一下吗? 问题是这样写程序的输出:

输出线#1

输出线#2

输出线#3

输出线#4

输出线#5

我已经试过计算程序,但仍然无法理解

节目就在这里,

变形类:

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);
    }
}

在这里,在第1行和第2行,您需要了解动态多态性是如何工作的,以及构造函数的调用顺序

由于
Worker
接口由class
A
实现,class
A
由class
B
和class
C
继承,因此可以参照
Worker
接口创建class
B
和class
C
的对象。因此,当创建类
B
或类
C
的对象时,首先调用父类
A
的构造函数,然后执行子类构造函数

因此,第1行的输出将为:

New guy!
This is B reporting
New guy!
It's C here!
第2行的输出为:

New guy!
This is B reporting
New guy!
It's C here!
现在在第3行和第4行,您需要了解在协作方法中作为参数传递的对象以及调用它的对象

在第3行,
collaboration
方法由类
C
的对象调用,类
B
的对象作为参数。因此,将调用类
C
collaboration
方法。但由于您将类
B
的对象作为参数传递,因此,将根据类
B
行为进行进一步的调用

现在类
C
中的
collaboration
方法有一个print语句,然后它将参数传递给父类(即类
a
)的
collaboration
)。在您的情况下,类
B
的对象将传递给类
A
中的
协作方法。因此,在类
A
collaboration
方法中,调用了worker对象的
snooze
方法(在本例中为类
B
),现在控件将转到类
B
snooze
方法,并在那里执行进一步的操作。在类
B
snooze
方法中,存在print语句,并调用父类(即类
a
snooze
方法。 因此,第3行的输出为:

Try to work together...
Watch out for the boss!
Zzzz
在第4行,
collaboration
方法由类
B
的对象调用,类
C
的对象作为参数。 由于类
B
没有自己的
协作
方法实现,因此将调用父类(即类
A
)的
协作
方法。在类
A
collaboration
方法中,调用了
snooze
参数方法(它是类
C
的对象),因此输出为:

Do this till 5pm.
在第5行,输出是直接的:

Who gets fired?

答案很有描述性,请仔细阅读答案…

我使用接口作为回调内容的一种方式。
接口
被用作多态性的一部分。它允许“对象”充当不同的类型(通过保证实现
接口
描述的功能。例如
苹果
可能被视为
水果
,因此它可以传递到
,其中作为
,不是
水果
,因此不能传递到
。清除为泥:P