Pattern matching для instanceof (Java 16+): что делает запись if (obj instanceof String s)?
Anonymous Quiz
32%
Проверяет тип, но не даёт обратиться как к String
3%
Выполняет каст только внутри блока else
46%
Проверяет тип и автоматически приводит obj к s
3%
Работает только для final классов
16%
Посмотреть ответ
✍3👍3🎉1
Please open Telegram to view this post
VIEW IN TELEGRAM
😁4🤓4💯2
IS-A отношения в Java простыми словами. Часть 1.
IS-A отношения в Java – это способ показать, что конкретный объект является типом другого объекта.
Давайте посмотрим, как ключевое слово extends используется для достижения наследования в Java.
public class Animal {
}
public class Mammal extends Animal {
}
public class Reptile extends Animal {
}
public class Dog extends Mammal {
}
На основе приведенного на Картинке примера, в объектно-ориентированных терминах верно следующее:
Класс Животное – суперкласс.
Млекопитающее – подкласс Животного.
Рептилия и Млекопитающее – подклассы Животного.
Собака является подклассом Млекопитающего и Животного.
✅ JavaStart. Подписаться
IS-A отношения в Java – это способ показать, что конкретный объект является типом другого объекта.
Давайте посмотрим, как ключевое слово extends используется для достижения наследования в Java.
public class Animal {
}
public class Mammal extends Animal {
}
public class Reptile extends Animal {
}
public class Dog extends Mammal {
}
На основе приведенного на Картинке примера, в объектно-ориентированных терминах верно следующее:
Класс Животное – суперкласс.
Млекопитающее – подкласс Животного.
Рептилия и Млекопитающее – подклассы Животного.
Собака является подклассом Млекопитающего и Животного.
Please open Telegram to view this post
VIEW IN TELEGRAM
✍3👍3👨💻2
Please open Telegram to view this post
VIEW IN TELEGRAM
😁5💯4👍1
Как из List<List<Integer>> получить плоский List<Integer> с помощью Stream API?
Anonymous Quiz
52%
flatMap(List::stream)
18%
map(List::stream)
3%
reduce(Integer::sum)
11%
collect(Collectors.toMap(...))
15%
Посмотреть ответ
👍3✍2🎉2👨💻1
Какой уровень изоляции транзакций предотвращает “phantom reads”?
Anonymous Quiz
17%
READ COMMITTED
21%
REPEATABLE READ
44%
SERIALIZABLE
10%
READ UNCOMMITTED
8%
Посмотреть ответ
✍3👍3🎉2
Please open Telegram to view this post
VIEW IN TELEGRAM
👍3😁3💯3✍2
Please open Telegram to view this post
VIEW IN TELEGRAM
Что напечатает код выше?
Anonymous Quiz
20%
true true true
14%
true true false
5%
true false false
14%
false false false
31%
true false true
5%
Exception будет
12%
Посмотреть ответ
✍4👍2🎉1
🔍 Ответ на задачу про сравнение строк в Java
Давайте разберемся, что напечатает приведённый код!
Этот код выводит на экран:
true — В первом сравнении (a == b), оба операнда являются строковыми литералами, и компилятор оптимизирует их, так что они указывают на один и тот же объект в строковом пуле.
false — Во втором сравнении (a == d), d создается путем конкатенации на этапе выполнения, из-за чего она не будет указывать на тот же объект в строковом пуле, что и a.
true — В третьем сравнении (a.equals(d)), метод equals сравнивает содержимое строк, а не их ссылки, потому этот результат будет true, так как содержимое одинаково.
Интересно, правда? 😄 Не забудьте, что использование оператора == для сравнения строк может привести к неожиданным результатам. Для проверки эквивалентности строк на уровне содержимого всегда используйте equals. ✅
✅ JavaStart. Подписаться
Давайте разберемся, что напечатает приведённый код!
String a = "ab";
String b = "a" + "b";
String c = "a";
String d = c + "b";
System.out.println(a == b);
System.out.println(a == d);
System.out.println(a.equals(d));
Этот код выводит на экран:
true — В первом сравнении (a == b), оба операнда являются строковыми литералами, и компилятор оптимизирует их, так что они указывают на один и тот же объект в строковом пуле.
false — Во втором сравнении (a == d), d создается путем конкатенации на этапе выполнения, из-за чего она не будет указывать на тот же объект в строковом пуле, что и a.
true — В третьем сравнении (a.equals(d)), метод equals сравнивает содержимое строк, а не их ссылки, потому этот результат будет true, так как содержимое одинаково.
Интересно, правда? 😄 Не забудьте, что использование оператора == для сравнения строк может привести к неожиданным результатам. Для проверки эквивалентности строк на уровне содержимого всегда используйте equals. ✅
Please open Telegram to view this post
VIEW IN TELEGRAM
👍6✍2👨💻2
Please open Telegram to view this post
VIEW IN TELEGRAM
😁5💯4👍1
IS-A отношения в Java простыми словами. Часть 2.
Ключевое слово instanceof.
Для определения типа объекта (является ли конкретный объект является типом другого объекта) в Java используется ключевое слово instanceof.
Давайте посмотрим на код на Картинках.
Объект m класса Mammal является типом объекта Animal, потому что класс Mammal наследуется от супер-класса Animals.
Объект d класса Dog является типом объекта Mammal, потому что класс Dog наследуется от класса Mammal.
При этом объект d класса Dog еще и является типом объекта Animal, потому что класс Mammal наследуется от класса Animal.
Как уже говорилось ранее - в Java нет множественного наследования (class X extends Y, Z, …), но классы могут наследоваться по цепочке (class X extends Y, class Y extends Z).
✅ JavaStart. Подписаться
Ключевое слово instanceof.
Для определения типа объекта (является ли конкретный объект является типом другого объекта) в Java используется ключевое слово instanceof.
Давайте посмотрим на код на Картинках.
Объект m класса Mammal является типом объекта Animal, потому что класс Mammal наследуется от супер-класса Animals.
Объект d класса Dog является типом объекта Mammal, потому что класс Dog наследуется от класса Mammal.
При этом объект d класса Dog еще и является типом объекта Animal, потому что класс Mammal наследуется от класса Animal.
Как уже говорилось ранее - в Java нет множественного наследования (class X extends Y, Z, …), но классы могут наследоваться по цепочке (class X extends Y, class Y extends Z).
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
✍3👍3👨💻2
Please open Telegram to view this post
VIEW IN TELEGRAM
😁5👍3✍1
Что обязательно переопределить вместе с equals() для корректной работы в HashSet/HashMap?
Anonymous Quiz
0%
clone()
5%
compareTo()
92%
hashCode()
0%
finalize()
3%
Посмотреть ответ
✍2👍2🎉2
Please open Telegram to view this post
VIEW IN TELEGRAM
👍3😁3💯2
Что “получаешь из коробки”, объявляя record Point(int x, int y)?
Anonymous Quiz
6%
Только геттеры
8%
Только конструктор
14%
Полный сет геттеров/сеттеров
53%
equals, hashCode, toString и геттеры-компоненты
19%
Посмотреть ответ
✍3👍2🎉2
ООП, Полиморфизм в Java простыми словами. Часть 1.
Полиморфизм, если перевести, - это значит "много форм". Например, актер в театре может примерять на себя много ролей - или принимать "много форм".
Так же и наш код - благодаря полиморфизму он становится более гибким, чем в языках программирования, которые не используют принципы ООП.
Переопределение методов родителя.
Когда мы наследуем какой-либо класс, мы наследуем и все его методы. Но если нам хочется изменить какой-либо из методов, который мы наследуем, мы можем всего-навсего переопределить его.
Мы не обязаны, например, создавать отдельный метод с похожим названием для наших нужд, а унаследованный метод будет без дела лежать в нашем классе.
Именно то, что мы можем создать в классе-наследнике класс с таким же названием, как и класс, который мы унаследовали от родителя, и называется переопределением.
Представим, что у нас есть такая структура как на Картинке.
Вверху иерархии классов стоит класс Animal. Его наследуют два класса - Cat и Dog.
У класса "Animal" есть метод "голос" (voice). Этот метод выводит на экран сообщение "Голос".
Естественно, ни собака, ни кошка не говорят "Голос" 🙂 Они гавкают и мяукают. Соответственно, нам нужно задать другой метод для классов Cat и Dog - чтобы кошка мяукала, а собака гавкала.
Поэтому, в классах-наследниках мы переопределяем метод voice(), чтобы мы в консоли получали "Мяу" и "Гав".
Обратите внимание: перед методом, который мы переопределяем, пишем @Override. Это дает понять компилятору, что мы хотим переопределить метод.
Тем не менее, полиморфизм - это принцип. Все реальные примеры, которые можно привести - это только способы реализации полиморфизма. Рассмотрим еще пример в одном из след постах.
✅ JavaStart. Подписаться
Полиморфизм, если перевести, - это значит "много форм". Например, актер в театре может примерять на себя много ролей - или принимать "много форм".
Так же и наш код - благодаря полиморфизму он становится более гибким, чем в языках программирования, которые не используют принципы ООП.
Переопределение методов родителя.
Когда мы наследуем какой-либо класс, мы наследуем и все его методы. Но если нам хочется изменить какой-либо из методов, который мы наследуем, мы можем всего-навсего переопределить его.
Мы не обязаны, например, создавать отдельный метод с похожим названием для наших нужд, а унаследованный метод будет без дела лежать в нашем классе.
Именно то, что мы можем создать в классе-наследнике класс с таким же названием, как и класс, который мы унаследовали от родителя, и называется переопределением.
Представим, что у нас есть такая структура как на Картинке.
Вверху иерархии классов стоит класс Animal. Его наследуют два класса - Cat и Dog.
У класса "Animal" есть метод "голос" (voice). Этот метод выводит на экран сообщение "Голос".
Естественно, ни собака, ни кошка не говорят "Голос" 🙂 Они гавкают и мяукают. Соответственно, нам нужно задать другой метод для классов Cat и Dog - чтобы кошка мяукала, а собака гавкала.
Поэтому, в классах-наследниках мы переопределяем метод voice(), чтобы мы в консоли получали "Мяу" и "Гав".
Обратите внимание: перед методом, который мы переопределяем, пишем @Override. Это дает понять компилятору, что мы хотим переопределить метод.
Тем не менее, полиморфизм - это принцип. Все реальные примеры, которые можно привести - это только способы реализации полиморфизма. Рассмотрим еще пример в одном из след постах.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍3✍2👨💻2
Please open Telegram to view this post
VIEW IN TELEGRAM
😁3✍2💯2👍1