Часть 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() - ты понял не тупой
Поле атрибут класса это
Переменная которая хранит какую-то характеристику объекта