Часть 1 Flashcards
3 принципа ООП
наследование
когда наследуешь
инкапсуляция
ограничиваешь доступ извне, скрываешь реализацию
полиморфизм
когда у разных классов одинаковый интерфейс
ещё абстракция
нихрена не понял
Где можно инициализировать статические или нестатические поля
Статические поля можно инициализировать во вермя объявления, в статическом или динамическом блоке инициализации.
Нестатические можно инициализировать в динамическом блоке инициализации, во время объявления, в конструкторе.
Дайте определение понятию “конструктор”
Метод который вызывается при создании объекта и инициализирует его.
Дайте определение понятию “метод”
Это как функция внутри класса (если возвращает void то процедура)
Дайте определение понятию класс
Ну схема по которой создаются объекты
Описание структуры объекта
Как получить доступ к переопределенным методам родительского класса
super.method()
Как правильно организовать доступ к полям класса
Объявить поля как private
Доступ организовать с помощью геттеров сеттеров
Какие методы называются перегруженными
Это методы с одинаковыми названиями которые принимают разные типы параметров
Какие модификации уровня доступа вы знаете, расскажите про каждый из них.
- public - доступно всем
- private - только этому классу
- без модификатора - доступен внутри
собственного пакета
- protected - этому классу и потомкам(в том числе потомкам в других пакетах)
Какие преобразования называются нисходящими и восходящими
upcasting - восходящее преобразование (от подкласса внизу к суперклассу вверху иерархии)
Animal lol = new Cat();
downcasting - нисходящее преобразование.
Оно автоматически не выполняется
надо использовать кастинг
Object x = new Animal;
Animal y = (Animal)x;
вот ещё пример
int x = 100;
byte y = (byte) x
Могут ли нестатические методы перегрузить статические
Да, могут.
Это будут просто два разных метода для программы. Статический будет доступен по имени класса.
(Модификатор статик делает поле или метод не зависимыми от объекта)
Может ли метод принимать разное количество параметров (аргументы переменной длины)
Да.
Это не тоже самое что перегруз.
Запись имеет видmethod(type … val)
Например:
public void method (String … strings) {
for (String s : strings) {
}
}
Можно ли сузить уровень доступа или тип возвращаемого значения при переопределении метода
Нельзя сузить модификатор доступа
Но можно расширить
Нельзя изменить возвращаемый тип
Но можно сузить возвращаемый тип
Типа в таком случае наследование будет работать
Если например код использут базовый тип и вызывает этот метод то конкретный тип подойдёт так как он возвращает подходящий тип. Типичная ситуация.
О чем говорят ключевые слова “this”, “super”, где и как их можно использовать
this - указывает на текущий класс
super - на базовый (ты можешь даже вызывать функции базового класса)
this() - вызов конструктора текущего класса
super() - ты понял не тупой
Поле атрибут класса это
Переменная которая хранит какую-то характеристику объекта
Расскажите об особенностях класса с единственным закрытым (private) конструктором.
- Нельзя создать экземпляр
- Нельзя создать потомков
Расскажите про переопределение методов. Могут ли быть переопределены статические методы
Переопределить базовый статический метод НЕЛЬЗЯ.
Насколько я понимаю переопределение это override.
Один класс может унаследовать метод от класса родителя и переопределить его.
Я не вижу проблем с переопределением статических методов. Однако этого делать нельзя.
ХОТЯ
Всё таки можно
объявить в дочернем классе static метод с такой же сигнатурой. Но это не @Override (переопределение) а это shadowing (перекрытие)
и там внутри нельзя использовать слово супер.
Короче ничего не понял спросить надо.
Чем отличается переопределение от перегрузки
Переопределить (override) метод можно при её наследовании.
Перегрузить (overload) можно добавив ещё один метод с таким же названием, но другим набором параметров.
Чем отличаются конструкторы по умолчанию, копирования и конструктор с параметрами
Конструктор по умолчанию не принимает никаких значений и вписывает в поля стандартные значения
Конструктор с параметрами принимает параметры и вписывает значения в поля
Конструктор копирования принимает объект того же класса и копирует его
Что такое сигнатура метода
насколько я понимаю это
его имя + количество порядок и типы параметров
чтобы во время вызова было понятно какой метод вызывается
Ключевые слова public, protected, private, abstract, static, final, synchronized, native, strictfp в том числе аннотации для метода — это модификаторы и не являются частью сигнатуры.