-1

На скрине приведен раздел из книги Блинова "Java промышленное программирование". Скрин

Не указано в каком отношении находится класс Course с классом CourseHelper. Это ошибка и автор просто забыл добавить, что CourseHelper extends Course или я что-то понимаю не так?

3 Answers3

3

Скорее всего, CourseHelper не связан с Course отношением наследования. Они просто взаимосвязаны, по есть класс написан в "помощь", чтобы с ним обращаться было легче. BaseCourseHelper наследует CourseHelper, это то, что можно вывести из данного кода.

  • Тогда я просто не понимаю, что происходит в этом коде) – Marty McFly Sep 23 '17 at 13:48
  • Первый абзац говорит о том, что класс Course должен наследоваться от исходного типа (насколько я понимаю, исходным типом будет СourseHelper). – Marty McFly Sep 23 '17 at 14:07
  • Ничего подобного, там просто определение функции с возвращаемым значением Course. – HasmikGaryaka Sep 23 '17 at 15:53
  • уже понял, спасибо – Marty McFly Sep 23 '17 at 15:54
2

Происходит следующее

введите сюда описание изображения

  • BaseCourse наследуется от Course
  • BaseCourseHelper наследуется от CourseHelper
  • CourseHelper в методе getCourse возвращает экземпляр Course
  • BaseCourseHelper в методе getCourse возвращает экземпляр BaseCourse

Собственно, автор учебника показывает возможность в дочернем классе (BaseCourseHelper) переопределять в методе (getCourse) возвращаемый тип (Course), но в пределах его дочерних классов (BaseCourse).

Nofate
  • 34,603
  • не могу не сказать большое спасибо) Очень помогли) – Marty McFly Sep 23 '17 at 14:13
  • А зачем все это делается? Если я правильно понимаю, CourseHelper bch = new BaseCourseHelper(); вызовет метод getСourse с BaseCourseHelper, после чего этот вызванный метод вернет объект BaseCourse, который будет присвоен ссылке Course вот здесь course = bch.getCourse, а тут System.out.println(bch.getCourse().id); выводит значение поля id для Course, чтобы он бы и сделал, если бы getCourse() вернул не BaseCourse, а Course. – Marty McFly Sep 23 '17 at 15:43
  • Ну это же просто учебный пример, чтобы показать, что такое впринципе скомпилируется. По факту у Course могут быть методы , которые переопределены в BaseCourse. И вызывающая сторона бедет работать с объектом, независимо от того как этот Course был получен. – Nofate Sep 23 '17 at 16:49
-1

Course это подкласс класса CourseHelper

  • Теперь я немного запутался. А BaseCourse это подкласс Course? Можете, пожалуйста, кратко описать все отношения между классами BaseCourse, Course, CourseHelper и BaseCourseHelper? – Marty McFly Sep 23 '17 at 13:32
  • Наследование является неотъемлемой частью Java. ... Главный наследуемый класс в Java называют суперклассом. Наследующий класс называют подклассом. Получается, что подкласс - это специализированная версия суперкласса, которая наследует все члены суперкласса и добавляет свои собственные уникальные элементы. – daniil mankevich Sep 23 '17 at 13:33
  • Это я знаю) Я спрашивал о конкретно этом примере. Что от чего наследуется? – Marty McFly Sep 23 '17 at 13:35
  • Это не наследование,а инкапсуляция – daniil mankevich Sep 23 '17 at 13:39
  • Основой инкапсуляции в Java является класс. ... Для этого у методов и переменных внутри класса могут быть модификаторы доступа (public, private). Инкапсуляция означает, что данные объекта недоступны его клиентам непосредственно. – daniil mankevich Sep 23 '17 at 13:41
  • Вы отвечаете не по теме – Marty McFly Sep 23 '17 at 13:41
  • @daniil mankevich, класс который наследуется от другого класса это не подкласс а наследник. подкласс - это класс внутри класса –  Sep 23 '17 at 13:43
  • Course это не класс,а обьект класса CourseHelper – daniil mankevich Sep 23 '17 at 13:43
  • https://ru.wikipedia.org/wiki/Подкласс_(программирование) – Marty McFly Sep 23 '17 at 13:44
  • спасибо Flippy,но объснял своим языком – daniil mankevich Sep 23 '17 at 13:44
  • @daniilmankevich Course это подкласс класса CourseHelper или Course это не класс,а обьект класса CourseHelper , вы уж определитесь ) (оба варианта неправильны) – Nofate Sep 23 '17 at 13:47
  • Тогда что такое Course – daniil mankevich Sep 23 '17 at 13:49
  • Какой-то класс, определенный выше. – HasmikGaryaka Sep 23 '17 at 15:54