Скоро-скоро весенне-летняя распродажа курсов на Степике!
✔️С 27 мая по 9 июня на все мои курсы будет скидка 20%. Если хотите добавить себе новые знания и навыки – это само время!
✔️Курсы выстроены в логическую цепочку: “Основы языка Java” -> “Объектно – ориентированное программирование на Java” -> “Прокачай Java”.
👌В итоге – знания Java Core на уровне junior . Как видите, звезд с неба и позицию senior не обещаю. Но твердую базу для дальнейшего развития – да!
✔️С 27 мая по 9 июня на все мои курсы будет скидка 20%. Если хотите добавить себе новые знания и навыки – это само время!
✔️Курсы выстроены в логическую цепочку: “Основы языка Java” -> “Объектно – ориентированное программирование на Java” -> “Прокачай Java”.
👌В итоге – знания Java Core на уровне junior . Как видите, звезд с неба и позицию senior не обещаю. Но твердую базу для дальнейшего развития – да!
❤2
class Test {
static int x = 5;
static void change(int x) {
x = x + 10;
}
public static void main(String[] args) {
change(x);
System.out.println(x);
}
}Вчера стартовала летняя распродажа на Stepik 🔥
Если давно хотели прокачать навыки по Java — сейчас хороший момент: до 9 июня на платформе действуют скидки на множество курсов по программированию.
Мои курсы тоже участвуют 🙌
Co скидкой 20% (самой большой в году!) можно приобрести:
— “Основы языка Java” – курс для полных новичков в этом языке;
— “Объектно – ориентированное программирование на Java” – следующий курс, который научит понимать принципы ООП и воплощать их в своем коде;
— “Прокачай Java” – курс, который завершает линейку изучения Java Core. Он посвящен изучению стандартных классов, а также современным возможностям Java.
Если давно хотели прокачать навыки по Java — сейчас хороший момент: до 9 июня на платформе действуют скидки на множество курсов по программированию.
Мои курсы тоже участвуют 🙌
Co скидкой 20% (самой большой в году!) можно приобрести:
— “Основы языка Java” – курс для полных новичков в этом языке;
— “Объектно – ориентированное программирование на Java” – следующий курс, который научит понимать принципы ООП и воплощать их в своем коде;
— “Прокачай Java” – курс, который завершает линейку изучения Java Core. Он посвящен изучению стандартных классов, а также современным возможностям Java.
👍4
И да, забыла самое выгодное: программы курсов:
— "Java Core: программа курсов" - включает все три моих курса по Java;
— "Программа: Java-разработчик [ Java + ООП + SQL + Linux + Git ]" - мастхев Java-разработчика.
— "Java Core: программа курсов" - включает все три моих курса по Java;
— "Программа: Java-разработчик [ Java + ООП + SQL + Linux + Git ]" - мастхев Java-разработчика.
👍4
class Test {
static int x = 10;
static {
x = 20;
}
public static void main(String[] args) {
System.out.println(x);
}
}👏4
class Test {
static int x = 10;
static void print() {
System.out.println(x);
}
}
public class Main {
public static void main(String[] args) {
Test t = null;
t.print();
}
}Что произойдет?
Anonymous Quiz
32%
NullPointerException
15%
Ошибка компиляции
49%
Вывод 10
5%
ClassCastException
👍5
class Test {
static int x = 10;
static void print() {
int x = 5;
System.out.println(this.x);
}
public static void main(String[] args) {
print();
}
}❤3
👍2
💡 Статические члены класса в Java — зачем они?
🔹 Статические поля — общие для всех объектов
Например, счётчик созданных экземпляров.
🔹 Статические методы — можно вызывать без создания объекта
Классический пример —
📌 Основные правила:
• К статическим членам обращаются через имя класса;
• Статический метод не имеет доступа к полям экземпляра напрямую;
• В статическом методе нельзя использовать
• Нестатические методы могут обращаться к статическим членам;
• Статические поля инициализируются при первом использовании класса (создание объекта или обращение к
• Вызов через объект (
⚠️ Важно: статические методы нельзя переопределять (override), только скрывать (hide).
Коротко:
static — это то, что относится не к объекту, а к классу в целом.🔹 Статические поля — общие для всех объектов
Например, счётчик созданных экземпляров.
🔹 Статические методы — можно вызывать без создания объекта
Классический пример —
Math.random().📌 Основные правила:
• К статическим членам обращаются через имя класса;
• Статический метод не имеет доступа к полям экземпляра напрямую;
• В статическом методе нельзя использовать
this;• Нестатические методы могут обращаться к статическим членам;
• Статические поля инициализируются при первом использовании класса (создание объекта или обращение к
static);• Вызов через объект (
obj.method()) допустим, но фактически компилятор заменяет его на вызов через класс.⚠️ Важно: статические методы нельзя переопределять (override), только скрывать (hide).
Коротко:
static = один на всех 👨👩👧👦👍6
Заметили? Степик обновил интерфейс задач на программирование…
Как Вам? Мне вообще-то больше нравился старый вариант. Но я известный ретроград 😊
А я напоминаю: распродажа Степика завершится 9 июня. А потом летний застой и повышение цен к осени ☹️. Не только у меня, а вообще.
Задумайтесь: может, стоит запастить курсам впрок?
Если что, ссылки на мои курсы тут:
• Основы языка Java
• Объектно-ориентированное программирование на Java
• Прокачай Java
• Java Core: программа курсов
• Программа: Java-разработчик [ Java + ООП + SQL + Linux + Git ]
Как Вам? Мне вообще-то больше нравился старый вариант. Но я известный ретроград 😊
А я напоминаю: распродажа Степика завершится 9 июня. А потом летний застой и повышение цен к осени ☹️. Не только у меня, а вообще.
Задумайтесь: может, стоит запастить курсам впрок?
Если что, ссылки на мои курсы тут:
• Основы языка Java
• Объектно-ориентированное программирование на Java
• Прокачай Java
• Java Core: программа курсов
• Программа: Java-разработчик [ Java + ООП + SQL + Linux + Git ]
💡 Какие самые частые вопросы на собеседовании по ООП?
🔥 1. База ООП (самое любимое у интервьюеров)
Практически обязательный вопрос:
👉 Абстракция, инкапсуляция, наследование, полиморфизм
Важно не просто знать определения, а уметь объяснить: где это используется в реальном коде, зачем это нужно, и как помогает проектировать системы
⚙️ 2. Интерфейс vs абстрактный класс
Когда использовать интерфейс, а когда абстрактный класс? Можно ли заменить одно другим?
🔁 3. Overloading vs Overriding
Любят задавать каверзные примеры с выводом кода.
🧠 4. Полиморфизм на практике
Где ты его реально использовал в проекте (или учебных задачах)?
🧩 5. Композиция vs наследование
Частый вопрос для более сильных кандидатов:
почему композиция часто лучше наследования
как уменьшить связанность кода
📦 6. Бонус: SOLID-принципы
Не всегда требуют глубоко, но почти гарантированно всплывают.
💬 А какие темы разобрать в отдельных постах?
🔥 1. База ООП (самое любимое у интервьюеров)
Практически обязательный вопрос:
👉 Абстракция, инкапсуляция, наследование, полиморфизм
Важно не просто знать определения, а уметь объяснить: где это используется в реальном коде, зачем это нужно, и как помогает проектировать системы
⚙️ 2. Интерфейс vs абстрактный класс
Когда использовать интерфейс, а когда абстрактный класс? Можно ли заменить одно другим?
🔁 3. Overloading vs Overriding
Любят задавать каверзные примеры с выводом кода.
🧠 4. Полиморфизм на практике
Где ты его реально использовал в проекте (или учебных задачах)?
🧩 5. Композиция vs наследование
Частый вопрос для более сильных кандидатов:
почему композиция часто лучше наследования
как уменьшить связанность кода
📦 6. Бонус: SOLID-принципы
Не всегда требуют глубоко, но почти гарантированно всплывают.
💬 А какие темы разобрать в отдельных постах?
❤5👍2
🧠 База ООП: зачем это вообще нужно?
ООП помогает снизить сложность разработки и строить системы, которые можно развивать годами:
✔️ менять код без боли
✔️ переиспользовать логику
✔️ делить систему на понятные части
✔️ масштабировать проект без хаоса
✔️ не сойти с ума от растущей сложности
🔹 Абстракция
Мы описываем объект через главное, убирая лишние детали.
Например: Car — это не набор болтов и проводов, а поведение машины: поехала, остановилась, заправилась.
💡 В коде это понятные методы, часто собранные в интерфейсы.
🔹 Инкапсуляция
Мы скрываем внутреннее устройство объекта и даём управляемый доступ к данным.
Например, поле balance нельзя менять напрямую — только через методы deposit() / withdraw().
💡 Это защищает данные от некорректного использования и позволяет менять внутреннюю реализацию класса, не затрагивая код, который его использует.
🔹 Наследование
Позволяет переиспользовать уже существующую логику и расширять её.
class Animal { }
class Dog extends Animal { }
💡 Это экономит время разработки и позволяет сосредоточиться на новых возможностях, а не переписывать базовое поведение.
🔹 Полиморфизм
Один интерфейс — разные реализации. В коде это означает: один и тот же вызов метода может работать по-разному в зависимости от объекта, который его реализует.
Shape s = new Circle();
s.draw();
💡 Это позволяет писать универсальный код на уровне абстракций и хранить разные объекты в одной коллекции.
ООП помогает снизить сложность разработки и строить системы, которые можно развивать годами:
✔️ менять код без боли
✔️ переиспользовать логику
✔️ делить систему на понятные части
✔️ масштабировать проект без хаоса
✔️ не сойти с ума от растущей сложности
🔹 Абстракция
Мы описываем объект через главное, убирая лишние детали.
Например: Car — это не набор болтов и проводов, а поведение машины: поехала, остановилась, заправилась.
💡 В коде это понятные методы, часто собранные в интерфейсы.
🔹 Инкапсуляция
Мы скрываем внутреннее устройство объекта и даём управляемый доступ к данным.
Например, поле balance нельзя менять напрямую — только через методы deposit() / withdraw().
💡 Это защищает данные от некорректного использования и позволяет менять внутреннюю реализацию класса, не затрагивая код, который его использует.
🔹 Наследование
Позволяет переиспользовать уже существующую логику и расширять её.
class Animal { }
class Dog extends Animal { }
💡 Это экономит время разработки и позволяет сосредоточиться на новых возможностях, а не переписывать базовое поведение.
🔹 Полиморфизм
Один интерфейс — разные реализации. В коде это означает: один и тот же вызов метода может работать по-разному в зависимости от объекта, который его реализует.
Shape s = new Circle();
s.draw();
💡 Это позволяет писать универсальный код на уровне абстракций и хранить разные объекты в одной коллекции.
👍4❤2🔥1
💡 Интерфейс vs абстрактный класс
Когда что использовать и можно ли одно заменить другим?
На первый взгляд кажется, что интерфейс и абстрактный класс — это почти одно и то же:
объекты нельзя создать напрямую, оба задают «контракт» для других классов.
Но разница есть — и она принципиальная 👇
🔹 Интерфейс — описывает поведение, не заботясь о реализации.
Один и тот же интерфейс могут реализовать неродственные классы (например, Flyable для птицы и самолёта).
Класс может реализовать несколько интерфейсов — это ключевое преимущество, которое частично заменяет множественное наследование (например, в C++).
👉 Используй интерфейс, когда:
• нужно задать контракт без привязки к реализации
• класс должен поддерживать несколько ролей
(например: Serializable, Comparable, Runnable)
🔹 Абстрактный класс может содержать поля и методы — как реализованные, так и абстрактные.
Если класс наследуется от абстрактного класса, он не может быть наследником другого класса.
👉 Используй абстрактный класс, когда:
• есть общая базовая реализация и классы тесно связаны между собой
• нужно переиспользовать код базового класса
(например, Shape для всех фигур)
🔥 Идеально — комбинировать оба подхода
(абстрактный класс + интерфейсы для расширения поведения)
Когда что использовать и можно ли одно заменить другим?
На первый взгляд кажется, что интерфейс и абстрактный класс — это почти одно и то же:
объекты нельзя создать напрямую, оба задают «контракт» для других классов.
Но разница есть — и она принципиальная 👇
🔹 Интерфейс — описывает поведение, не заботясь о реализации.
Один и тот же интерфейс могут реализовать неродственные классы (например, Flyable для птицы и самолёта).
Класс может реализовать несколько интерфейсов — это ключевое преимущество, которое частично заменяет множественное наследование (например, в C++).
👉 Используй интерфейс, когда:
• нужно задать контракт без привязки к реализации
• класс должен поддерживать несколько ролей
(например: Serializable, Comparable, Runnable)
🔹 Абстрактный класс может содержать поля и методы — как реализованные, так и абстрактные.
Если класс наследуется от абстрактного класса, он не может быть наследником другого класса.
👉 Используй абстрактный класс, когда:
• есть общая базовая реализация и классы тесно связаны между собой
• нужно переиспользовать код базового класса
(например, Shape для всех фигур)
🔥 Идеально — комбинировать оба подхода
(абстрактный класс + интерфейсы для расширения поведения)
🔥4👍2
🔥 Overloading vs Overriding в Java — не путай!
Частый вопрос на собеседованиях и база ООП. Разберёмся быстро 👇
🧩 Overloading (перегрузка)
Это когда в одном классе несколько методов с одинаковым именем, но разными параметрами (разные сигнатуры).
📌 Решается на этапе компиляции
🧬 Overriding (переопределение)
Подкласс меняет поведение метода родителя.
Имя и параметры — те же.
📌 Решается во время выполнения (runtime) → полиморфизм
Использование:
💡 Как запомнить:
Overloading — много методов с одним именем
Overriding — меняем поведение метода в наследнике
Частый вопрос на собеседованиях и база ООП. Разберёмся быстро 👇
🧩 Overloading (перегрузка)
Это когда в одном классе несколько методов с одинаковым именем, но разными параметрами (разные сигнатуры).
📌 Решается на этапе компиляции
class MathUtils {
int sum(int a, int b) {
return a + b;
}
double sum(double a, double b) {
return a + b;
}
int sum(int a, int b, int c) {
return a + b + c;
}
}🧬 Overriding (переопределение)
Подкласс меняет поведение метода родителя.
Имя и параметры — те же.
📌 Решается во время выполнения (runtime) → полиморфизм
class Animal {
void makeSound() {
System.out.println("Some sound");
}
}
class Dog extends Animal {
@Override
void makeSound() {
System.out.println("Bark");
}
}Использование:
Animal a = new Dog();
a.makeSound(); // Bark
💡 Как запомнить:
Overloading — много методов с одним именем
Overriding — меняем поведение метода в наследнике
❤2🔥1
class A {
void print(int x) {
System.out.println("A int");
}
}
class B extends A {
void print(double x) {
System.out.println("B double");
}
}
public class Main {
public static void main(String[] args) {
A obj = new B();
obj.print(5);
}
}Что будет выведено на консоль?
Anonymous Quiz
38%
A int
41%
B double
18%
Ошибка компиляции
3%
Runtime Error
👍3
class A {
void show() {
System.out.println("A");
}
}
class B extends A {
void show() {
System.out.println("B");
}
}
public class Main {
public static void main(String[] args) {
A obj = new B();
obj.show();
}
}👍2