Співбесіда по java - ООП (питання і відповіді)

Питання і відповіді по темі ООП (об'єктно орієнтоване програмування) для співбесіди по Java.

Список всіх питань по ООП

21. Навіщо потрібен оператор instanceof?
22. Навіщо потрібні і які бувають блоки ініціалізації?
23. Який порядок виклику конструкторів і блоків ініціалізації двох класів: нащадка і його предка?
24. Де і для чого використовується модифікатор abstract?
25. Чи можна оголосити метод абстрактним і статичним одночасно?
26. Що означає ключове поле static?
27. До яких конструкцій Java застосуємо модифікатор static?
28. Що буде, якщо в static блоці коду виникне виняткова ситуація?
29. Чи можна перевантажити static метод?
30. Що таке статичний клас, які особливості його використання?
31. Які особливості ініціалізації final static змінних?
32. Як впливає модифікатор static на клас / метод / поле?
33. Про що говорить ключове слово final?
34. Дайте визначення поняттю "інтерфейс".
35. Які модифікатори за замовчуванням мають поля і методи інтерфейсів?
36. Чому не можна оголосити метод інтерфейсу з модифікатором final або static?
37. Які типи класів бувають в java (вкладені ... і.т.д.)
38. Які особливості створення вкладених класів: простих і статичних.
39. Що ви знаєте про вкладені класах, навіщо вони використовуються? Класифікація, варіанти використання, про порушення інкапсуляції.
40. У чому різниця вкладених і внутрішніх класів?
41. Які класи називаються анонімними?
42. Яким чином з вкладеного класу отримати доступ до поля зовнішнього класу?

Відповіді. Частина 1

Об'єктно-орієнтоване програмування (ООП) - це методологія програмування, заснована на представленні програми у вигляді сукупності об'єктів, кожен з яких є екземпляром певного класу, а класи утворюють ієрархію спадкування.

Основні принципи ООП: абстракція, інкапсуляція, успадкування, поліморфізм.

Абстракція - означає виділення значущої інформації і виключення з розгляду незначною. З точки зору програмування це правильний розподіл програми на об'єкти. Абстракція дозволяє відібрати головні характеристики і опустити другорядні.

Приклад: опис посад в компанії. Тут назва посади значима інформація, а опис обов'язків у кожної посади це другорядна інформація. Наприклад головною характеристикою для «директор» буде те, що це посада чимось керує, а чому саме (директор по персоналу, фінансовий директор, виконавчий директор) це вже другорядна інформація.

Інкапсуляція - властивість системи, що дозволяє об'єднати дані і методи, що працюють з ними, в класі. Для Java коректно буде говорити, що інкапсуляція це «приховування реалізації». Приклад з життя - пульт від телевізора. Ми натискаємо кнопочку «збільшити гучність» і вона збільшується, але в цей момент відбуваються десятки процесів, які приховані від нас. Для Java: можна створити клас з 10 методами, наприклад обчислюють площу складної фігури, але зробити з них 9 private. 10й метод буде називатися «вичіслітьПлощадь ()» і оголошений public, а в ньому вже будуть викликатися необхідні приховані від користувача методи. Саме його і буде викликати користувач.

Спадкування - властивість системи, що дозволяє описати новий клас на основі вже існуючого з частково або повністю запозичує функціональністю. Клас, від якого виробляється спадкування, називається базовим, батьківським або суперкласом. Новий клас - нащадком, спадкоємцем, дочірнім або похідним класом.

Поліморфізм - властивість системи використовувати об'єкти з однаковим інтерфейсом без інформації про тип і внутрішню структуру об'єкта. Приклад (трохи перероблений) з Thinking in Java:

  • private (закритий) - доступ до члена класу не надається нікому, крім методів цього класу. Інші класи того ж пакета також не можуть звертатися до private-членам.
  • default, package, friendly, доступ за замовчуванням, коли ніякої модифікатор не присутній - члена класу вважається відкритим всередині свого власного пакета, але не доступний для коду, розташованого поза цим пакета.Т.е. якщо package2.Class2 extends package1.MainClass. то в Class2 методи без ідентифікатора з MainClass видно не будуть.
  • protected (захищений) - доступ в межах пакету і класів спадкоємців. Доступ в класі з іншого пакета буде до методів public і protected головного класу. Тобто якщо package2.Class2 extends package1.MainClass. то всередині package2.Class2 методи з ідентифікатором protected з MainClass буде видно.
  • public (відкритий) - доступ для всіх з будь-якого іншого коду проекту

Модифікатори в списку розташовані по зростаючій видимості в програмі.

Неможливо створити об'єкт класу у якого єдиний private конструктор за межами класу. Тому не можна успадкувати від такого класу. При спробі успадкувати буде видаватися помилка: There is no default constructor available in імяКласса. А при спробі створити об'єкт цього класу: ІмяКласса () has private access in ІмяКласса

9. Про що говорять ключові слова "this", "super", де і як їх можна використовувати?

super - використовується для звернення до базового класу, а this до поточного. приклад:

10. Дайте визначення поняттю "метод".

Метод - це послідовність команд, які викликаються за певним імені. Можна сказати що це функція і процедура (в разі void методу).

11. Що таке сигнатура методу?

Сигнатура методу в Java - це ім'я методу плюс параметри (причому порядок параметрів має значення).
У сигнатуру методу не входить повертається значення, які кидають їм виключення, а також модифікатори.

Ключові слова public, protected, private, abstract, static, final, synchronized, native, strictfp в т.ч. анотації для методу - це модифікатори і не є частиною сигнатури.

12. Які методи називаються перевантаженими?

Java дозволяє створювати кілька методів з однаковими іменами, але різними сигнатурами. Створення методу з тим же ім'ям, але з іншим набором параметрів називається перевантаженням. Який з перевантажених методів повинен виконуватися при виклику, Java визначає на основі фактичних параметрів.

13. Чи можуть нестатичні методи перевантажити статичні?

Так. Це будуть просто два різних методу для програми. Статичний буде доступний на ім'я класу.

Метод в класі-спадкоємця, що співпадає по сигнатурі з методом з батьківського класу називається перевизначення методом. Перевизначити базовий статичний метод не можна: Instance method імяМетода in классНаследнік can not override method імяМетода in родітельскійКласс

15. Чи може метод приймати різну кількість параметрів (аргументи змінної довжини)?

Так. Запис має вигляд method (type ... val). Наприклад public void method (String ... strings). де strings це масив, тобто можна записати

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

20. Де можна форматувати статичні / нестатичні поля?

6674 Total Views 2 Views Today

32. Як впливає модифікатор static на клас / метод / поле?
...
Створити або перезаписати таке поле повторно не можна (инициализируется один раз). --- це для static final (P.S. Створити повторно поле. Можливо я чогось не знаю)

19. Чим відрізняється перевизначення від перевантаження?
Основною відмінністю є те, що при перевантаженні необхідний метод визначається на етапі компіляції на основі сигнатури викликається методу, тоді як при перевизначенні потрібний метод буде виявлено під час виконання виходячи з реального типу об'єкта.

Перетворення від нащадка до предка називається висхідним, від пращура до нащадка - низхідним. Спадний перетворення повинно вказуватися явно за допомогою вказівки нового типу в дужках.

Висхідний перетворення (від предка від нащадку) виконується неявно, що сходить (від нащадка до предка) - із зазначенням нового типу в дужках. Виправте будь ласка.

Все правильно написано. Upcasting (висхідний) перетворення, це від SomeClass cls до Object obj (від нащадка до предка). Назад cls = (SomeClass) obj - downcasting (спадний перетворення). Вказується явно.


public class Test public static void main (String [] args) A a = new A ();
B b = new B ();

a = b; // спадний - від пращура до нащадка - неявно
b = (B) a; // висхідний - від нащадка до предка - явно
>
>

class A <>
class B extends A <>

Спадний перетворення повинно вказуватися явно за допомогою вказівки нового типу в дужках.

public Dog () <
System. out. println ( «A»); // це повинно бути в конструкторі нижче

public Dog (String name) <
System. out. println ( «Call empty constructor»); // це в конструкторі вище

this. name = name;

16. Чи можна звузити рівень доступу / тип значення при перевизначенні методу?
«При перевизначенні методу можна звузити модифікатор доступу до методу» - модифікатор доступу можна розширити

Схожі статті