ООП Flashcards
(52 cards)
ООП
совокупности объектов, каждый из которых является экземпляром определённого класса, а классы образуют иерархию наследования.
Абстракция — означает выделение значимой информации
Инкапсуляция - сокрытие логики в классе
Наследование - перенимать свойства родительских
Полиморфизм - одинаковые интерфейсы с разной реализацией
класс
описание структуры данных
правильно организовать доступ к полям класса?
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); }}); }}); }};
Каков порядок вызова конструкторов и блоков инициализации двух классов: потомка и его предка?
Сначала вызываются все статические блоки от первого предка до последнего наследника. Потом попарно вызываются динамический блок инициализации и конструктор в той же последовательности (от предка до последнего потомка).
модификатор abstract
класс, на основе которого не могут создаваться объекты. метод, который не имеет реализации.
Если в классе есть хотя бы один абстрактный метод, то весь класс должен быть объявлен абстрактным.Использование абстрактных классов и методов позволяет описать некую абстракцию, которая должна быть реализована в других классах
Можно ли объявить метод абстрактным и статическим одновременно?
Нет. abstract говорит, что метод будет реализован в другом классе, а static наоборот указывает, что этот метод будет доступен по имени класса.
ключевое поле static
Модификатор static говорит о том, что метод или поле класса принадлежат не объекту, а классу.
На методы, объявленные как static, накладывается ряд ограничений.
Они могут вызывать только другие статические методы.
Они должны осуществлять доступ только к статическим переменным.
Они не могут ссылаться на члены типа this или super.