ООП Flashcards
ООП
совокупности объектов, каждый из которых является экземпляром определённого класса, а классы образуют иерархию наследования.
Абстракция — означает выделение значимой информации
Инкапсуляция - сокрытие логики в классе
Наследование - перенимать свойства родительских
Полиморфизм - одинаковые интерфейсы с разной реализацией
класс
описание структуры данных
правильно организовать доступ к полям класса?
private. Доступ через методы get\set.
конструктор
метод вызываемый при создании обьекта
Чем отличаются конструкторы по-умолчанию, копирования и конструктор с параметрами?
Конструктор по умолчанию не принимает никаких параметров. Конструктор копирования принимает в качестве параметра объект класса. Конструктор с параметрами принимает на вход параметры (обычно необходимые для инициализации полей класса).
модификации уровня доступа
private в пределах класса.
default, в пределах пакета
protected доступ в пределах пакета и классов наследников.
public доступ для всех из любого другого кода проекта
Расскажите об особенностях класса с единственным закрытым (private) конструктором.
Невозможно создать объект класса у которого единственный private конструктор за пределами класса. Поэтому нельзя унаследоваться от такого класса. При попытке унаследоваться будет выдаваться ошибка: There is no default constructor available in имяКласса. А при попытке создать объект этого класса: ИмяКласса() has private access in ИмяКласса
О чем говорят ключевые слова “this”, “super”, где и как их можно использовать?
super — используется для обращения к базовому классу, а this к текущему.
Дайте определение понятию “метод”.
Метод — это последовательность команд, которые вызываются по определенному имени. Можно сказать что это функция и процедура (в случае void метода).
сигнатура метода?
имя метода плюс параметры (причем порядок параметров имеет значение).
В сигнатуру метода не входит возвращаемое значение, бросаемые им исключения, а также модификаторы.
Модификаторы метода
Ключевые слова public, protected, private, abstract, static, final, synchronized, native, strictfp в т.ч. аннотации для метода — это модификаторы и не являются частью сигнатуры.
Какие методы называются перегруженными?
с одинаковыми именами, но разными сигнатурами.
Могут ли нестатические методы перегрузить статические?
Да. Это будут просто два разных метода для программы. Статический будет доступен по имени класса.
Могут ли быть переопределены статические методы?
Переопределить базовый статический метод нельзя
Может ли метод принимать разное количество параметров (аргументы переменной длины)?
Да. массив: public void method (String ... strings) { for (String s : strings) { } }
Можно ли сузить уровень доступа/тип возвращаемого значения при переопределении метода?
При переопределении метода нельзя сузить модификатор доступа к методу. нельзя Изменить тип возвращаемого значения . Но можно сузить возвращаемое значение, если они совместимы. Например:
Как получить доступ к переопределенным методам родительского класса?
super.method();
Чем отличается переопределение от перегрузки?
Переопределение - изменение существующего метода. Перегрузка — это использование одного имени, но с разными входными параметрами.
instanceof
возвращает true, если объект является экземпляром класса или его потомком.
блоки инициализации?
наборы выражений инициализации полей, заключенные в фигурные скобки и размещаемые внутри класса вне объявлений методов или конструкторов. Блок инициализации выполняется так же, как если бы он был расположен в верхней части тела любого конструктора. Бывают статические и нестатические блоки инициализации. Так же возможно создать такой блок в анонимном классе. Пример статического class Foo { static List abc; static { abc = new LinkedList(); for (char c = 'A'; c <= 'Z'; ++c) { abc.add( c ); } } }
//Пример инициализации в анонимном классе JFrame frame = new JFrame() {{ add(new JPanel() {{ add(new JLabel("Хабрахабр?") {{ setBackground(Color.BLACK); setForeground(Color.WHITE); }}); }}); }};