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
Композиция vs наследование в Java
Один из самых частых вопросов при проектировании классов: что выбрать — наследование или композицию?
Оба подхода позволяют переиспользовать код, но делают это по-разному и подходят для разных ситуаций.
🔹 Наследование (Inheritance)
Наследование — это отношение «является» (is-a).
Здесь
Плюсы:
✔️ Простое повторное использование кода
✔️ Естественно моделирует иерархии
Минусы:
✔️ Жёсткая связность между классами
✔️ Изменения в базовом классе могут ломать наследников
✔️ Ограничение: в Java нет множественного наследования классов
🔹 Композиция (Composition)
Композиция — это отношение «имеет» (has-a).
Плюсы:
✔️ Гибкость (можно менять поведение во время выполнения)
✔️ Лучше подходит для расширяемых систем
Минусы:
✔️ Требует больше кода
🔥 Главное правило - предпочитайте композицию наследованию, если это возможно (Favor composition over inheritance)
Пример сравнения
❌ Через наследование:
Проблема: машина ≠ самолёт.
✅ Через композицию:
Один из самых частых вопросов при проектировании классов: что выбрать — наследование или композицию?
Оба подхода позволяют переиспользовать код, но делают это по-разному и подходят для разных ситуаций.
🔹 Наследование (Inheritance)
Наследование — это отношение «является» (is-a).
class Animal {
void eat() {
System.out.println("Eating...");
}
}
class Dog extends Animal {
void bark() {
System.out.println("Barking...");
}
}Здесь
Dog — является Animal. Класс-наследник автоматически получает поведение родителя.Плюсы:
✔️ Простое повторное использование кода
✔️ Естественно моделирует иерархии
Минусы:
✔️ Жёсткая связность между классами
✔️ Изменения в базовом классе могут ломать наследников
✔️ Ограничение: в Java нет множественного наследования классов
🔹 Композиция (Composition)
Композиция — это отношение «имеет» (has-a).
class Engine {
void start() {
System.out.println("Engine started");
}
}
class Car {
private Engine engine = new Engine();
void start() {
engine.start();
}
}Car не является Engine, но содержит его.Плюсы:
✔️ Гибкость (можно менять поведение во время выполнения)
✔️ Лучше подходит для расширяемых систем
Минусы:
✔️ Требует больше кода
🔥 Главное правило - предпочитайте композицию наследованию, если это возможно (Favor composition over inheritance)
Пример сравнения
❌ Через наследование:
class FlyingCar extends Car {
void fly() {}
}Проблема: машина ≠ самолёт.
✅ Через композицию:
class FlyingAbility {
void fly() {}
}
class Car {
private FlyingAbility flyingAbility;
void fly() {
flyingAbility.fly();
}
}Почему композицию часто предпочитают наследованию?
Anonymous Quiz
6%
Потому что она быстрее
83%
Потому что уменьшает связанность и повышает гибкость
6%
Потому что требует меньше кода
6%
Потому что не использует объекты
💡 SOLID-принципы в Java: пишем код, который не ломается через неделю
SOLID — это 5 принципов объектно-ориентированного программирования, которые помогают создавать гибкий, понятный и расширяемый код.
🔹 S — Single Responsibility Principle
Один класс — одна ответственность. Меньше причин для изменения = меньше багов.
🔹 O — Open/Closed Principle
Код открыт для расширения, но закрыт для изменения. Добавляем новое — не ломаем старое.
🔹 L — Liskov Substitution Principle
Наследники должны корректно заменять родительские классы. Без “сюрпризов”.
🔹 I — Interface Segregation Principle
Лучше много маленьких интерфейсов, чем один «жирный».
🔹 D — Dependency Inversion Principle
Зависим от абстракций, а не от конкретных реализаций.
🚀 Итог: SOLID — это не теория ради теории. Это про код, который легче читать, тестировать и поддерживать.
Используешь SOLID — экономишь время себе (и своей команде) в будущем.
SOLID — это 5 принципов объектно-ориентированного программирования, которые помогают создавать гибкий, понятный и расширяемый код.
🔹 S — Single Responsibility Principle
Один класс — одна ответственность. Меньше причин для изменения = меньше багов.
🔹 O — Open/Closed Principle
Код открыт для расширения, но закрыт для изменения. Добавляем новое — не ломаем старое.
🔹 L — Liskov Substitution Principle
Наследники должны корректно заменять родительские классы. Без “сюрпризов”.
🔹 I — Interface Segregation Principle
Лучше много маленьких интерфейсов, чем один «жирный».
🔹 D — Dependency Inversion Principle
Зависим от абстракций, а не от конкретных реализаций.
🚀 Итог: SOLID — это не теория ради теории. Это про код, который легче читать, тестировать и поддерживать.
Используешь SOLID — экономишь время себе (и своей команде) в будущем.
❤3🔥2
Делюсь свежими отзывами о курсе «Основы языка Java».
Спасибо всем, кто находит время их оставить — для меня это действительно очень ценно ❤️
А ещё ваши отзывы помогают другим определиться с траекторией обучения.
⭐️⭐️⭐️⭐️⭐️
Отличный курс, рекомендую всем, кто впервые сталкивается с Java. Так же в курсе содержится полезная информация про JVM (Java Virtual Machine), которая широко распространена в IT. Советую заострить внимание на JVM, полезно получить начальные сведения об этом для общего развития в рамках Computer Science, всем, кто сталкивается с устройством программ, приложений, устройств.
Artur Minnibaev 14 часов назад
⭐️⭐️⭐️⭐️⭐️
Отличный курс! Рекомендую всем, кто хочет освоить Основы языка Java с нуля!
Виктор Суглобов 4 дня назад
⭐️⭐️⭐️⭐️⭐️
Выбрала курс Оксаны Еськовой потому что уже проходила ее курсы по С++ и знала, что все темы будут доступно и подробно объяснены и задачи для закрепления материала интересные, хотя и не всегда даются просто. Так и случилось! Курс очень понравился, прошла его довольно быстро и купила уже остальные ее курсы по Java. И я в предвкушении новых интересных знаний! От всей души благодарю Оксану Ивановну и желаю больших творческих успехов! А тем, кто хочет изучать программирование и получать от этого истинное удовольствие - учитесь на курсах Оксаны Еськовой!
Татьяна Пачина 22 дня назад
Спасибо всем, кто находит время их оставить — для меня это действительно очень ценно ❤️
А ещё ваши отзывы помогают другим определиться с траекторией обучения.
⭐️⭐️⭐️⭐️⭐️
Отличный курс, рекомендую всем, кто впервые сталкивается с Java. Так же в курсе содержится полезная информация про JVM (Java Virtual Machine), которая широко распространена в IT. Советую заострить внимание на JVM, полезно получить начальные сведения об этом для общего развития в рамках Computer Science, всем, кто сталкивается с устройством программ, приложений, устройств.
Artur Minnibaev 14 часов назад
⭐️⭐️⭐️⭐️⭐️
Отличный курс! Рекомендую всем, кто хочет освоить Основы языка Java с нуля!
Виктор Суглобов 4 дня назад
⭐️⭐️⭐️⭐️⭐️
Выбрала курс Оксаны Еськовой потому что уже проходила ее курсы по С++ и знала, что все темы будут доступно и подробно объяснены и задачи для закрепления материала интересные, хотя и не всегда даются просто. Так и случилось! Курс очень понравился, прошла его довольно быстро и купила уже остальные ее курсы по Java. И я в предвкушении новых интересных знаний! От всей души благодарю Оксану Ивановну и желаю больших творческих успехов! А тем, кто хочет изучать программирование и получать от этого истинное удовольствие - учитесь на курсах Оксаны Еськовой!
Татьяна Пачина 22 дня назад
int[][] a = {
{10, 20},
{30, 40},
{50, 60}
};
System.out.println(a.length);
System.out.println(a[0].length);👍4
Можно ли создать такой массив?
int[][] array = new int[3][];
int[][] array = new int[3][];
Anonymous Quiz
33%
Нет, двумерный массив должен иметь два размера. Ошибка компиляции
46%
Да, получится массив из трех null
18%
Да, получится массив из трех строк длины 0
3%
Возникнет ошибка во время выполнения
👍3
int[][] a = new int[2][3];
a[0][1] = 10;
System.out.println(a[1][0]);
👍1
int[][] a = {
{1, 2, 3},
{4, 5, 6}
};
int[] row = a[0];
row[1] = 100;
System.out.println(a[0][1]);👍1
☕️ Что такое двумерный массив в Java?
В Java двумерный массив — это массив ссылок на одномерные массивы. Поэтому строки можно создавать не сразу, а по мере необходимости:
На этом этапе создан только массив из трёх ссылок. Каждая из них пока равна
Теперь создадим строки отдельно:
Строки могут иметь разную длину, поскольку каждая из них — самостоятельный массив.
Обращение к элементам выполняется привычным способом:
При этом:
⚠️ Если обратиться к элементу строки до её создания, возникнет
В Java двумерный массив — это массив ссылок на одномерные массивы. Поэтому строки можно создавать не сразу, а по мере необходимости:
int[][] arr = new int[3][];
На этом этапе создан только массив из трёх ссылок. Каждая из них пока равна
null:System.out.println(arr[0]); // null
Теперь создадим строки отдельно:
arr[0] = new int[2];
arr[1] = new int[4];
arr[2] = new int[3];
Строки могут иметь разную длину, поскольку каждая из них — самостоятельный массив.
Обращение к элементам выполняется привычным способом:
arr[1][2] = 10;
System.out.println(arr[1][2]); // 10
При этом:
arr.length // количество ссылок на строки
arr[1].length // длина второй строки
⚠️ Если обратиться к элементу строки до её создания, возникнет
NullPointerException:int[][] data = new int[3][];
data[0][0] = 5; // ошибка: data[0] == null
👍6
public class Main {
static void print(long value) {
System.out.println("long");
}
static void print(Integer value) {
System.out.println("Integer");
}
public static void main(String[] args) {
print(10);
}
}👍1
Что будет выведено на консоль?
Anonymous Quiz
30%
long
37%
Integer
24%
Ошибка компиляции
9%
undefined behavior
👍1
import java.util.Arrays;
class Main {
static void change(int[] array) {
array[0] = 10;
array = new int[]{20, 30};
}
public static void main(String[] args) {
int[] numbers = {1, 2};
change(numbers);
System.out.println(Arrays.toString(numbers));
}
}
❤3
class Main {
static void show(String value) {
System.out.println("String");
}
static void show(Integer value) {
System.out.println("Integer");
}
public static void main(String[] args) {
show(null);
}
}👍3