Возникли проблемы с пониманием выхода программы.Интерфейс - PullRequest
0 голосов
/ 13 декабря 2018

У меня был этот вопрос на моем промежуточном этапе, и я изо всех сил пытался ответить на него.Я не понимаю, как работают интерфейсы.Может кто-нибудь объяснить мне, пожалуйста?Вопрос заключался в том, чтобы написать вывод программы следующим образом:

Выходная строка # 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);
    }
}

1 Ответ

0 голосов
/ 13 декабря 2018

Здесь, в строках 1 и 2, вам необходимо понять, как работает динамический полиморфизм и последовательность вызова конструкторов.

Поскольку интерфейс Worker реализован классом A и классом Aнаследуется классом B и классом C, поэтому можно создавать объекты класса B и класса C со ссылкой на интерфейс Worker.Итак, когда будут созданы объекты класса B или класса C, в первую очередь будет вызван конструктор родительского класса A, затем произойдет выполнение конструктора дочернего класса

. Поэтомув строке # 1 вывод будет:

New guy!
This is B reporting

, а в строке # 2 вывод будет:

New guy!
It's C here!

Теперь в строке 3 и 4 вам нужно понять, какиеобъект, который вы передаете в качестве аргумента в методе сотрудничество и с каким объектом вы его вызываете.

В строке # 3 метод collaboration вызывается объектом класса C с объектом класса B в качестве параметра.Следовательно, метод collaboration класса C будет вызван.Но поскольку вы передаете объект класса B в качестве параметра, дальнейшие вызовы будут выполняться в соответствии с поведением класса B.

Теперь метод collaboration в классе C имеет оператор print, а затемон передает аргумент collaboration родительского класса (то есть класса A).В вашем случае объект класса B будет передан методу collaboration в классе A.Так, в методе collaboration класса A вызывается метод snooze объекта работника (в данном случае это будет класс B), теперь элемент управления перейдет к методу snooze класса B и дальнейшее исполнение там произойдет.В snooze методе класса B имеется оператор print и происходит вызов родительского класса (который является классом A) snooze.Таким образом, выходные данные в строке # 3 будут:

Try to work together...
Watch out for the boss!
Zzzz

В строке # 4 метод collaboration вызывается объектом класса B с объектом класса C в качестве параметра.Поскольку класс B не имеет собственной реализации метода collaboration, поэтому будет вызван метод collaboration родительского класса (то есть класса A).В collaboration методе класса A, snooze вызывается метод аргумента (который является объектом класса C), поэтому вывод:

Do this till 5pm.

В строке # 5,вывод прост:

Who gets fired?

Ответ довольно наглядный, пожалуйста, внимательно прочитайте ответ ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...