Почему строки (Strings) неизменяемы в Java?
Источник: Dev.to Прежде чем понять, почему строки (Strings) неизменяемы в Java, нам нужно подумать, почему мы делаем что-то неизменным? Неизменный (Immutable) означает, что однажды созданное мы уже изменить не можем. Единственная причина, по которой мы можем думать о том, чтобы сделать что-либо неизменным, — это синхронизация при совместном использовании. Именно по этой причине строки неизменяемы. В Java объекты String совместно используются и кэшируются в String Pool. Это определенное место в куче, где строки хранятся и совместно используются несколькими потоками, если они имеют одинаковое значение. Например: в пуле строк, если уже существует строка со значением “test” и программа хочет создать другой строковый объект с тем же значением, тогда она получит ту же ссылку вместо создания нового строкового объекта. Теперь мы знаем, как строки хранятся в куче. Давайте посмотрим, почему они неизменны.Первая причина неизменности — потокобезопасность. Поскольку строки разделяются между несколькими потоками в пуле строк, нам нужно ограничить любой случайный поток, чтобы его изменить. Любое изменение в строке может повлиять на другие потоки, обращающиеся к той же строке. Если поток хочет обновить значение строки, ему необходимо создать другую строку и поставить на нее ссылку.
Обычно мы используем String в качестве ключа в Map. Если бы строки были изменяемыми, любой мог бы изменить значение строк, и мы потеряли бы актуальный ключ.
Интерфейс в Java и множественное наследование
Источник: Dev.to Давайте разберемся, что такое множественное наследование. Множественное наследование — это функция некоторых объектно-ориентированных языков программирования, в которых объект или класс могут наследовать функции более чем одного родительского объекта или родительского класса. Как показано на рисунке выше, в дочернем классе с множественным наследованием может быть два или более базовых класса, но для достижения этого нам нужен интерфейс.Интерфейс
Интерфейс в Java — это план класса. Он имеет статические константы и абстрактные методы. То есть, интерфейс может содержать только абстрактные методы и переменные, у него не может быть тела метода. Его нельзя создать так же, как абстрактный класс.Итак, где мы объявляем тело этих методов?
Тело метода объявляется внутри класса, где метод нужен в соответствии с требованиями программиста.Как объявить интерфейс?
Интерфейс можно объявить с использованием ключевого слова interface. Синтаксис:
interface interface_name {abstract methods}
Примечание
Для того, чтобы использовать заявленный интерфейс в классе, мы должны использовать ключевое слово implements.Имплементация?
Сначала мы создадим интерфейс print, а внутри него создадим абстрактный метод print();
interface printgib{
void print();
}
Теперь у нас есть интерфейс, готовый для использования классами, поэтому давайте создадим классы abc и gk и реализуем в них интерфейс.
public class abc implements printgib{
public void print(){ //1st implementation of print
System.out.println("I love you 3000");
}
public static void main(String[] args){
abc obj = new abc();
gk obj1 = new gk();
obj.print();
obj1.print();
}
}
class gk implements printgib{
public void print(){ //2nd implementation of print
System.out.println("I am Gk");
}
}
Как показано в приведенном выше коде, мы достигли множественного наследования и реализовали интерфейс.
Теперь, чтобы запустить код, сохраните файл и…
javac file_name.java
java abc
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ