JavaCore ООП. Ревью 2. 2 5 6 7 8 10 11 12 13 14 16 18 22 26 27 28 17 9 29 10 19 Что такое ооп В чем его плюсы
Скачать 27.95 Kb.
|
20 1 21 15 3 30 23 4 24 25 2 5 6 7 8 10 11 12 13 14 16 18 22 26 27 28 17 9 29 10 + 19 -1.Что такое ООП? В чем его плюсы? +2.Перечислите основные принципы ООП -3.Что такое инкапсуляция? Приведите пример инкапсуляции? -4.Что такое полиморфизм? Приведите пример полиморфизма? +5.Что такое наследование? Приведите пример наследования? Зачем оно нужно? +6.Что такое класс? Объект? +7.Как передаются объекты в метод? +8.Что такое переопределение метода в Java? +9.Что такое перегрузка метода в Java? +10.Что такое нативные методы, их плюсы и минусы? +11.Какие модификаторы доступа могут быть у класса? +12.Что такое final? Что может быть final? Как они работают? +13.Как реализована неизменность String? +14.Как реализовать свой Immutable тип данных? -15.Что такое ключевое слово static? Что может быть static? +16.Могут ли нестатические методы перегрузить статические? +17.Что такое пакет? Как создать пакет? +18.Что такое конструкторы? Конструктор по-умолчанию? 19.Расскажи, что такое this и super? Когда мы обязаны использовать this и super? -20.Класс Object и все методы кроме wait, notify, notifyAll -21.Зачем нужен метод finalize? +22.Из-за чего происходят коллизии? -23.В чём разница между instanceOf и getClass? -24.Перечислите методы именно класса Enum? -25.Что такое интерфейс? Когда использовать интерфейс? +26. Можно ли создать поле в интерфейсе? +27.Есть ли в Java множественное наследование? Зачем реализовывать интерфейс интерфейсу? +28.Можно ли создавать статик методы в интерфейсах? 29.Что такое абстрактный метод? -30.Что такое абстрактный класс? Чем отличается от обычного? 1.Что такое ООП? В чем его плюсы? Парадигма программирования в которой система представляется в виде набора объектов, которые взаимодействуют между собой. Каждый объект обладает идентичностью(то, что отличает один объект класса от другого, по идентичности определяется метод equals), состоянием(набор полей и значений), поведением(набор всех методов) Плюсы: визуально код проще и легче читать, меньше одинакового кода, сложные программы можно разбивать на простые части. Увеличивается скорость написания(можно создать прототип и дорабатывать его). 2.Перечислите основные принципы ООП Инкапсуляция Наследование Полиморфизм Абстракция (Выделение значимых характеристик предмета и отбрасывание второстепенных, в зависимости от ситуации(Если мы описываем человека работника – важны его имя, дата рождения, ИНН и т.д. Если описываем человека модель – важны вес, цвет волос, цвет глаз и т.д. 3.Что такое инкапсуляция? Приведите пример инкапсуляции? Ограничение доступа к данным и возможностям их изменения. Пример, объект у которого есть поле возраст. Если не пользоваться инкапсуляцией, в любой части кода можно будет задать полю возраст отрицательное значение, что не имеет смысла. Мы можем сделать ограничить доступ к полю с помощью модификаторов, а значение получать/изменять через геттеры/сеттеры. 4.Что такое полиморфизм? Приведите пример полиморфизма? Возможность работать с несколькими типами так, будто это один и тот же тип. При этом поведение разное в зависимости от типа, к которому они принадлежат. Пример: класс Animal с методом voice(), и два наследника Cat и Dog У классов наследников методы voice отличаются. Но если мы создадим ссылку Animal, а присвоим ей объект-наследник, при вызове метода voice() будет вызываться метод наследника. При вызове нет необходимости указывать какого-именно наследника. Второй пример: мы можем указать родительский класс в параметрах метода, а передавать классы наследники. Полиморфизм позволяет перегрузку метода. 5.Что такое наследование? Приведите пример наследования? Зачем оно нужно? Механизм, который позволяет описать новый класс на основе существующего. При этом свойства и функциональность родительского класса заимствуются новым классом. Позволяет избегать повторного использования кода (поля и методы родительских классов можно использовать в потомках), следовательно сами классы становятся проще. А недостающую функциональность потомка можно дописать отдельно. 6.Что такое класс? Объект? Класс – шаблонная конструкция, описывающая объект(свойства и поведения) Объект создается из существующего класса (при помощи слова new) 7.Как передаются объекты в метод? Передается копия ссылки на область памяти, где расположен объект. 8.Что такое переопределение метода в Java? Изменение реализации родительского метода у класса наследника. 9.Что такое перегрузка метода в Java? Использование методов с одним и тем же именем, но с разными типами и количеством параметров. 10.Что такое нативные методы, их плюсы и минусы? Методы, реализованные на другом языке(обычно С или С++) Плюсы: использование библиотек на других языках, не реализованных на Java Возможность получить что-то напрямую от операционной системы(прокси пользователя) Повышение производительности Минусы: на различные платформы и операционные системы нужна различная реализация 11.Какие модификаторы доступа могут быть у класса? Default (класс видят только расположенные с ним в одном пакете классы), Public(видят все) 12.Что такое final? Что может быть final? Как они работают? Модификатор, делающий дальнейшее изменение объекта невозможным. В случае с классами – запрещает наследование. В случае с полями – запрещает изменение. Для метода – запрет на переоределение в подклассах. Для ссылочных переменных(и массивы) – запрещает изменить ссылку на данный объект(ссылку изменить нельзя, но состояние объекта можно) String это final 13.Как реализована неизменность String? Final класс, значение строки хранится в массиве private final char. Нет сеттеров. 14.Как реализовать свой Immutable тип данных? Сделать класс final. все элементы static final, заданные явно или в конструкторе. Не делать сеттеры. 15.Что такое ключевое слово static? Что может быть static? Модификатор, применяемый к полю, блоку, методу или внутреннему классу. Указывает на привязку к текущему классу, а не к объекту 16.Могут ли нестатические методы перегрузить статические? Могут. Получится два разных метода. Статический будет принадлежать классу и будет доступен через его имя. Нестатический будет принадлежать конкретному объекту и доступен через вызов метода этого объекта. 17.Что такое пакет? Как создать пакет? Способ объединить группу классов, интерфейсов и подпакетов. Могут содержаться в сжатом виде в JAR файлах. На уровне файловой системы пакеты это и есть папки, в которых лежат другие папки (подпакеты) и классы. Во время создания пакета вы должны выбрать ему имя и включить оператор package вместе с этим именем поверх каждого исходного файла, который содержит классы, интерфейсы, перечисления и типы аннотаций, которые вы хотите включить в пакет. Оператор package должен быть первой строкой в исходном файле. Может быть только один запрос package в каждом исходном файле, и он применяется ко всем типам в этом файле. Если оператор package не использован, тогда классы, интерфейсы, перечисления и типы аннотаций будут помещены в текущий пакет по умолчанию. 18.Что такое конструкторы? Конструктор по-умолчанию? Специальный метод, имя совпадает с именем класса и вызывается при создании экземпляра объекта совместно с оператором new. Не имеет возвращаемого типа. Цель конструктора — правильно инициализировать объект перед его использованием. Конструктор по умолчанию – созданный компилятором конструктор, если не определены другие конструкторы для класса. 19.Расскажи, что такое this и super? Когда мы обязаны использовать this и super? Это специальные ключевые слова, представляют экземпляр класса и суперкласса. Используем для вызова конструктора, для обращения к переменным(особенно в случае, если имена переменных класса перекрываются локальными переменными в текущем блоке) this и super – статические переменные, ими нельзя пользоваться в нестатическом контексте. Внутри конструктора долнжы стоять на первом месте, в одном конструкторе может быть что-то одно. 20.Класс Object и все методы кроме wait, notify, notifyAll -clone() protected Object – создает и возвращает копию объекта -equals(Object obj) – проверяется равенство двух объектов -finalize() (protected void) - -getClass() final Class> - Возвращает класс среды выполнения этого Object. -hashCode() int – возвращает значение хэш-кода -toString() String – возвращает строковое представление объекта 21.Зачем нужен метод finalize? Вызывается сборщиком мусора для объекта, когда сборщик мусора определяет, что ссылок на объект больше нет. Java машина может отложить уничтожение объекта, как и вызов метода finalize на сколько угодно. И не гарантирует, что этот метод вообще будет вызван. В куче ситуаций ради оптимизации он не вызывается. Кратко: можно использовать только в двух случаях: проверка/подчистка ресурсов с логированием и при работе с нативным кодом, который не критичен к утечке ресурсов. Замедляет работу GC по очистке объекта в 430 раз и может быть вообще не вызван. Deprecated с 9 версии. Более подходящие классы для освобождения ресурсов – Cleaner, PhantomReference 22.Из-за чего происходят коллизии? Ситуация когда у разных объектов одинаковые хеш-коды называется коллизией. Вероятность коллизии зависит от используемого алгоритма генерации хеш-кода. Количество уникальных хэш кодов ограничено значениями Integer. 23.В чём разница между instanceOf и getClass? При использовании getClass вы можете проверить только принадлежность к определенному классу и не более. При использовании instanceOf вы можете проверить как принадлежность к классу, так и к родительским классам. 24.Перечислите методы именно класса Enum? Clone() исключение CloneNotSupportedException compareTo(E o) сравнивает это перечесление с указанным объектом describeConstable() - дескриптор equals(Object other) – true, если указанный объект равен константе enum getDeclaringClass() – возвращант объект класса, соответствующий типу enum для этой константы enum hashCode() – хэш код для этой константы перечесления name() – имя константы, в точности так, как указано в объявлении ordinal() – порядковый номер константы(ее позицию в объявлении enum toString() – возвращает имя константы enum, содержащейся в объявлении valueOf(Class 25.Что такое интерфейс? Когда использовать интерфейс? Интерфейсы определяют некоторый функционал, не имеющий конкретной реализации, который затем реализуют классы, применяющие эти интерфейсы. И один класс может применить множество интерфейсов. 26.Можно ли создать поля в интерфейсе? Поля могут быть, но только static final 27.Есть ли в Java множественное наследование? Зачем реализовывать интерфейс интерфейсу? Класс в java может расширить только один родительский класс. Множественное наследование невозможно. Но класс может реализовывать множество интерфейсов. Интерфейсы – не классы, интерфейс может расширить более чем один родительский интерфейс. Реализовывать для расширения дочернего интерфейса родительским. Дочерний наследует методы родительского интерфейса. 28.Можно ли создавать статик методы в интерфейсах? Можно, но вызываются они только с использованием имени интерфейса, а не класса 29.Что такое абстрактный метод? Метод без реализации, который обязаны реализовывать дочерние классы. Ключевое слово abstract перед именем метода. Содержит сигнатуру метода, но не содержит тело. Точка с запятой в конце 30.Что такое абстрактный класс? Чем отличается от обычного? Класс, объявленный с ключевым словом abstract. Его нельзя реализовать, может содержать абстрактные и неабстрактные методы. Для использования нужно наследовать его из другого класса. Абстрактные методы обязательно должны быть реализованы дочерними классами. |