JavaRush /Курси /Java Syntax Zero /Додаткові лекції до рівня

Додаткові лекції до рівня

Java Syntax Zero
Рівень 18 , Лекція 9
Відкрита

Відносини між класами. Наслідування, композиція, агрегація

У програмуванні ти швидко зрозумієш, як важливо не писати зайвий об'єм коду. На щастя, у Java є все необхідне, щоб елегантно «скорочувати». У цій лекції наочно описані відносини між класами: наслідування, композиція, агрегація. Готуйся: буде багато цікавих прикладів.

Принципи інкапсуляції

Інкапсуляція, приховання — це різні поняття чи одне й те саме? На базовому рівні ти вже не раз стикався з інкапсуляцією. Якщо хочеш знати, як «сховати» від користувача складні механізми роботи твоєї програми і залишити на виду лише зручний інтерфейс, радимо уважно прочитати цю лекцію.

Практика використання поліморфізму

Основна перевага поліморфізму — гнучкість. З одного боку, ти можеш працювати з кількома типами даних так, ніби це один тип. З іншого боку, завдяки цьому принципу ти можеш зберігати поведінку об'єктів. Коли тобі знадобиться приведення до єдиного вигляду, а коли — унікальні характеристики? Про це і поговоримо.

Навіщо в Java потрібні інтерфейси

У цій лекції неспішно та докладно описано, що таке інтерфейси і чому вони з’явилися в мові. А ще ти дізнаєшся про популярні інтерфейси в Java. Готуйся, це тема з продовженням!

Різниця між абстрактними класами та інтерфейсами

У цій лекції поговоримо про те, чим абстрактні класи відрізняються від інтерфейсів і розглянемо приклади з поширеними абстрактними класами.

Ми присвятили відмінностям абстрактного класу від інтерфейсу окрему лекцію, оскільки тема дуже важлива. Про різницю між цими поняттями тебе спитають на 90% майбутніх співбесід. Тому обов'язково розберися з прочитаним, а якщо щось не до кінця зрозумієш, почитай додаткові джерела.


18
Опитування
Знайомство з ООП, рівень 18, лекція 9
Недоступний
Знайомство з ООП
Знайомство з ООП
Коментарі (7)
ЩОБ ПОДИВИТИСЯ ВСІ КОМЕНТАРІ АБО ЗАЛИШИТИ КОМЕНТАР,
ПЕРЕЙДІТЬ В ПОВНУ ВЕРСІЮ
Olexandr Рівень 47
4 лютого 2024
Питання 3 - не правильно запрограмована відповідь! Чи можна присвоїти змінній класу-спадкоємця посилання на об'єкт базового класу? Можна, але потрібно явно вказати перетворення!!! Але тест потребує відповіді НІ!

public class SClass extends Outer{
	
SClass a = (SClass) new Outer();
такий код працює!
Dmytro Рівень 26
24 червня 2024
компилятор то пропустит, но код же нерабочий в рантайме так что какой смысл в таком коде?
IronMan57 Рівень 28
17 січня 2025
Я також допустив цю помилку, але в загальному випадку правильна відповідь саме "ні". Наприклад, ми маємо базовий клас Animal та успадковані від нього класи Cat і Dog. Приклад працюючого коду:

Animal myasopolk = new Cat;
Animal zashibis = new Dog;
Cat myFavoriteCat = (Cat) myasopolk;
Але цей код працює тільки тому, що змінна myasopolk типу базового класу зберігає посилання на об'єкт-спадкоємець. Але, якщо в третьому рядку буде інша команда:

...
...
Cat myFavoriteCat = (Cat) zashibis;
то ми спіймаємо виняток. Тому в загальному випадку на питання: "Чи можна присвоїти змінній класу-спадкоємця посилання на об'єкт базового класу?" правильна відповідь "Ні". Я так думаю ☝
Jane Fox Рівень 26
22 листопада 2023
Цей рівень, і тема ООП взагалі мені дуже сподобались. Задачі йшли як горішки. Тест 8/10, є над чим попрацювати👌
Sava_crosava Рівень 23
31 жовтня 2023
Питання прості але заплутані) Не вважаю це катастрофою(хоча 5 з 10 це дуже погано)
[V.I.R.U.S.] Рівень 24 Expert
16 квітня 2023
Найгірший мій тест((( 5 з 10-ти
Pavlo Kezin Рівень 23
1 жовтня 2023
я теж... ще гірше 4/10