JavaRush /Java блог /Random /Кофе-брейк #105. Почему строки (Strings) неизменяемы в Ja...

Кофе-брейк #105. Почему строки (Strings) неизменяемы в Java? Интерфейс в Java и множественное наследование

Статья из группы Random

Почему строки (Strings) неизменяемы в Java?

Источник: Dev.to Прежде чем понять, почему строки (Strings) неизменяемы в Java, нам нужно подумать, почему мы делаем что-то неизменным? Кофе-брейк #105. Почему строки (Strings) неизменяемы в Java? Интерфейс в Java и множественное наследование - 1Неизменный (Immutable) означает, что однажды созданное мы уже изменить не можем. Единственная причина, по которой мы можем думать о том, чтобы сделать что-либо неизменным, — это синхронизация при совместном использовании. Именно по этой причине строки неизменяемы. В Java объекты String совместно используются и кэшируются в String Pool. Это определенное место в куче, где строки хранятся и совместно используются несколькими потоками, если они имеют одинаковое значение. Например: в пуле строк, если уже существует строка со значением “test” и программа хочет создать другой строковый объект с тем же значением, тогда она получит ту же ссылку вместо создания нового строкового объекта. Теперь мы знаем, как строки хранятся в куче. Давайте посмотрим, почему они неизменны.
  1. Первая причина неизменности — потокобезопасность. Поскольку строки разделяются между несколькими потоками в пуле строк, нам нужно ограничить любой случайный поток, чтобы его изменить. Любое изменение в строке может повлиять на другие потоки, обращающиеся к той же строке. Если поток хочет обновить значение строки, ему необходимо создать другую строку и поставить на нее ссылку.

  2. Обычно мы используем String в качестве ключа в Map. Если бы строки были изменяемыми, любой мог бы изменить значение строк, и мы потеряли бы актуальный ключ.

Интерфейс в Java и множественное наследование

Источник: Dev.to Давайте разберемся, что такое множественное наследование. Множественное наследование — это функция некоторых объектно-ориентированных языков программирования, в которых объект или класс могут наследовать функции более чем одного родительского объекта или родительского класса. Кофе-брейк #105. Почему строки (Strings) неизменяемы в Java? Интерфейс в Java и множественное наследование - 1Как показано на рисунке выше, в дочернем классе с множественным наследованием может быть два или более базовых класса, но для достижения этого нам нужен интерфейс.

Интерфейс

Интерфейс в 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

Результат:

Кофе-брейк #105. Почему строки (Strings) неизменяемы в Java? Интерфейс в Java и множественное наследование - 2
Комментарии (4)
ЧТОБЫ ПОСМОТРЕТЬ ВСЕ КОММЕНТАРИИ ИЛИ ОСТАВИТЬ КОММЕНТАРИЙ,
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ
Павел Игонин Уровень 23
16 декабря 2021
Пример: нужно построить что-то умеющее "ехать" и "бибикать". От отца унаследуем "ехалку", а от матери "бибикалку". Вот как надо: interface Jechac{ void go(); } interface Bibikac{ void horn(); } Отец реализует первый интерфейс, а мать второй. Тогда их отпрыск будет очень на них похож, ведь он сможет все вместе. "implements" можно добавлять в обьявление класса сколько душе угодно раз.
Павел Игонин Уровень 23
16 декабря 2021
То ли лыжи не едут, то ли автор устал... Множественное наследование означает: обьект получает свойства своих (многих) родителей. А автор дошел только до того, что показал, как имплементировать интерфейс у двух классов.