Black box

  • 26
  • Недоступна
1. Восстанови логику метода someAction для поля solutionAction. 2. Пример вывода смотри в комментарии к методу main. 3. Подсказка: метод someAction анонимного класса поля solutionAction должен вызвать метод сабкласса FirstClass, если param > 0, иначе вызвать метод сабкласса SecondClass. Не изменяй
Вы не можете решать эту задачу, т.к. не залогинены.
Комментарии (169)
  • популярные
  • новые
  • старые
Для того, чтобы оставить комментарий вы должны авторизоваться
Leo 25 уровень, Москва
11 января, 22:18
Странная задача, вроде и лёгкая, но меня посетили очень странные чувства при её решении. Например, вывод переменной от 5 до 1, или же съедание валидатором такого решения третьего пункта:
....
private Action solutionAction = new Action() {
        @Override
        public void someAction() {
            class A implements Action{
                @Override
                public void someAction() {

                }
            }

            class B extends A{
                B(){
                    super.someAction();
                }
            }
....
Станислав 28 уровень
9 января, 15:39
Интересная задача :) 1. Важно объявить переменные в анонимном классе для классов First и Second, но не реализовывать их. т.к. в задании есть счетчик создания объекта countActionObjects условие требует во втором случае с параметром param -1 чтобы объект создался 1 раз! А т.к у нас метод someAction класса Solution вызывает solutionAction.someAction() , то при повторном создании объекта Solution, countActionObjects покажет 4 !
Vadim 27 уровень
22 декабря 2020, 19:10
в выводе получалось " Count of created Action objects is 1" и " Count of created Action objects is 2". оказалось нужно было цикл засунуть в if, а у меня сначала был цикл, а потом if
if (param > 0) {
                while (param > 0)
                    System.out.println(param--);
.......
может кому-то будет полезно
Dmitry 27 уровень, Хабаровск
21 декабря 2020, 05:08
Эта задача, пожалуй, самая запутанная из всех, которые до этого были. С точки зрения постановки задачи, а точнее, её отсутствия =)
Анатолий 29 уровень
11 декабря 2020, 08:10
По пункту использования строковых констант: SomeAction() из SecondClass вызывать не надо, берёте StringBuilder СекондКласса - sb, он модификатором protected обозначен, добавляете к нему public переменную SPECIFIC_ACTION_FOR_ANONYMOUS_SECOND_CLASS_PARAM (у неё в начале символ перевода строки) и добавляете переменную param. Не забываем перед стрингбилдером и строковой константой через точку написать имя созданного объекта типа SecondClass. Вроде: objSecCl.sb.append(objSecCl.SPECIFIC_ACTION_FOR_ANONYMOUS_SECOND_CLASS_PARAM).append(param). Печатаете строку. По поводу super.someAtion(): в методе ПервогоКласса, getDependantAction(), который вы реализуете, вставьте super.someAtion(). Посмотрите на вывод, удалите вызов ненужного метода Первого класса, если вы его написали в другом месте ;)
Alexander Software Developer
16 ноября 2020, 07:27
Забавно,
System.out.println(SecondClass.SPECIFIC_ACTION_FOR_ANONYMOUS_SECOND_CLASS_PARAM.trim() + " " + param);
валидатор не пропустил по второму пункту ("Для вывода должны быть использованы строковые константы объявленные в классе SecondClass."), а
System.out.println(SecondClass.SPECIFIC_ACTION_FOR_ANONYMOUS_SECOND_CLASS_PARAM.substring(1) + param);
схавал.
DZ 35 уровень
8 ноября 2020, 16:46
Пока делал эту задачу моё внутреннее состояние периодически менялось от брызгов радости с того, что понял пожелания разработчиков, до состояния расплющенного пятна высотой не выше плинтуса. И что в итоге? В итоге я увидел, как можно играться с уже готовыми классами, используя их методы в анонимных классах или переписывая, меняя функциональность, имея доступ к переменным суперкласса. Для подгона результатов решения к условию были созданы внутри анонимного класса в методе someAction () другие анонимные классы с нужными методами и вызовами. А когда валидатор возмутился: "И хде тут super.someAction()???", пришлось впихнуть в один из анонимных классов внутри другого такого же конструкцию в виде:
if (param == 99) {
    super.someAction();
}
Я рад, что поэкспериментировал с анонимными классами, но я ничего не понял в этой задаче.
Ula08 31 уровень, Гродно
2 октября 2020, 19:53
Поясните, пожалуйста, где инициализируется переменная countActionObjects?
Interstellar Java Developer в EPAMExpert
19 октября 2020, 12:10
Эта переменная - статическая, примитивного типа int, поэтому она инициализируется при объявлении (по дефолту сразу присваивается 0)
Ula08 31 уровень, Гродно
22 октября 2020, 18:24
Спасибо
wan-derer.ru 39 уровень, Москва
2 октября 2020, 09:35
Сделал, скорее всего, неправильно, особенно в части super.someAction(); так, воткнул в случайное место чтобы компилятор не ругался. Валя скушала и ладно. По поводу "херня, а не задача" - полностью солидарен! В первую очередь надо понимать что именно мы делаем, а здесь этим и не пахнет. В общем, авторам этих задач и рахдела в целом - твёрдый ноль!
Zhan Peskov 35 уровень, Москва
22 сентября 2020, 23:24
Со вторым классом самое лучшее и короткое решение это через абстрактный класс new SecondClass() { { sb.append(SPECIFIC_ACTION_FOR_ANONYMOUS_SECOND_CLASS_PARAM); sb.append(param); } }.someAction(); остальное решаем сами и только потом подглядываем