Java — это объектно-ориентированный язык программирования, который позволяет разработчикам создавать классы и объекты. Повышение и понижение — это две концепции, связанные с наследованием классов и полиморфизмом объектов.

Обновление в Java и как это работает?

Это процесс преобразования объекта подкласса в его ссылочный тип суперкласса. Другими словами, это способ обращения с объектом подкласса как с объектом его суперкласса. Это преобразование выполняется неявно виртуальной машиной Java (JVM) во время выполнения.

При выполнении преобразования объект подкласса теряет свои определенные атрибуты и методы, которых нет в его суперклассе. Результирующий объект может получить доступ только к методам и атрибутам, которые определены в суперклассе.

Повышение приведения полезно, когда вы хотите использовать один ссылочный тип для ссылки на объекты разных подклассов. Это позволяет вам писать более общий код, который может обрабатывать различные типы объектов, без необходимости писать отдельный код для каждого типа.

Пример преобразования в Java

Рассмотрим пример повышения приведения в Java. Предположим, у нас есть иерархия классов, которая выглядит так:

class Animal 
{ 
public void makeSound() 
{ System.out.println("Animal is making a sound"); }
}
class Dog extends Animal 
{
public void makeSound() 
{ System.out.println("Dog is barking"); 
}
public void fetch() 
{
System.out.println("Dog is fetching");
}
} 
Dog myDog = new Dog(); Animal myAnimal = myDog;

В этом коде мы создаем объект Dog с именем myDog. Затем мы приводим myDog к ссылке Animal с именем myAnimal. Теперь myAnimal может получить доступ только к методам и атрибутам, определенным в классе Animal:

myAnimal.makeSound(); // печатает «Собака лает»

Полезно прочитать: Самый простой способ узнать, что такое сборка мусора в Java

Даункастинг в Java и как это работает?

Даункастинг противоположен восходящему. Это процесс преобразования ссылочного типа суперкласса в его объект подкласса. Другими словами, это способ обращения с объектом суперкласса как с объектом его подкласса. Это преобразование явно выполняется программистом с помощью оператора приведения.

Когда выполняется понижающее приведение, проверяется ссылка на суперкласс, чтобы увидеть, относится ли она к объекту подкласса. Если это так, ссылка преобразуется в тип подкласса. Если это не так, во время выполнения генерируется исключение ClassCastException.

Понижающее приведение полезно, когда вы хотите получить доступ к определенным методам и атрибутам объекта подкласса, которых нет в его суперклассе. Однако его следует использовать с осторожностью, поскольку это может привести к ошибкам времени выполнения, если ссылка на суперкласс не ссылается на объект подкласса.

Пример понижения частоты в Java

Давайте рассмотрим пример понижения приведения в Java. Предположим, у нас есть та же иерархия классов, что и раньше:

class Animal

{

public void makeSound()

{

System.out.println("Animal is making a sound");

}

}

class Dog extends Animal

{

public void makeSound()

{ System.out.println("Dog is barking");

}

public void fetch() {

System.out.println("Dog is fetching");

}

}

Теперь давайте создадим объект Animal и приведем его к ссылке Dog:

Животное myAnimal = новая собака(); Собака myDog = (Собака) myAnimal;

В этом коде мы создаем объект Animal с именем myAnimal. Затем мы приводим myAnimal к ссылке Dog с именем myDog. Теперь myDog может получить доступ к определенным методам и атрибутам, определенным в классе Dog:

myDog.makeSound(); // печатает «Собака лает» myDog.fetch(); // печатает «Собака бежит»

Разница между повышением и понижением частоты

Основное различие между повышением и понижением заключается в направлении преобразования. Восходящее преобразование преобразует объект подкласса в его ссылку на суперкласс, а понижающее преобразование преобразует ссылку суперкласса в его объект подкласса.

Повышение приведения выполняется неявно JVM во время выполнения, а понижение приведения выполняется явно программистом с помощью оператора приведения.

Это безопасно, потому что разрешает доступ только к методам и атрибутам, определенным в суперклассе. С другой стороны, понижение приведения может быть опасным, поскольку может привести к ошибкам времени выполнения, если ссылка на суперкласс не ссылается на объект подкласса.

Полезно прочитать: Главные особенности JavaScript, которые вы должны знать

Когда использовать повышение и понижение приведения в Java?

Повышение приведения полезно, когда вы хотите написать универсальный код, который может обрабатывать объекты разных типов без необходимости писать отдельный код для каждого типа. Это также полезно, когда вы хотите создать коллекции объектов, которые имеют общий суперкласс.

Понижающее приведение полезно, когда вы хотите получить доступ к определенным методам и атрибутам объекта подкласса, которых нет в его суперклассе. Однако его следует использовать с осторожностью, поскольку это может привести к ошибкам времени выполнения, если ссылка на суперкласс не ссылается на объект подкласса.

Лучшие практики для повышения и понижения приведения в Java

Вот несколько рекомендаций по использованию восходящего и понижающего приведения в Java:

  • Используйте восходящее приведение для написания универсального кода, который может обрабатывать различные типы объектов без необходимости писать отдельный код для каждого типа.
  • Используйте понижающее приведение экономно и только тогда, когда вам нужно получить доступ к определенным методам и атрибутам объекта подкласса, которых нет в его суперклассе.
  • Всегда проверяйте тип объекта перед понижением, чтобы избежать ошибок во время выполнения.
  • Избегайте использования понижающего приведения в критически важном для производительности коде, поскольку это может быть медленным.

Распространенные ошибки, которых следует избегать при использовании восходящего и нисходящего приведения в Java

Вот несколько распространенных ошибок, которых следует избегать при использовании восходящего и понижающего приведения в Java:

  • Использование понижающего приведения без предварительной проверки типа объекта может привести к ошибкам во время выполнения.
  • Это чрезмерно может затруднить чтение и сопровождение кода.
  • Использование преобразования со сложной иерархией объектов может привести к неожиданному поведению.
  • Если вы забудете привести объект перед преобразованием вниз, это также может привести к ошибкам во время выполнения.

Полезно прочитать:- Разница между C++ и Java | C++ против Java

Заключение

В заключение, повышающее и понижающее приведение — две важные концепции в Java, которые позволяют разработчикам работать с наследованием классов и полиморфизмом объектов. Повышение приведения — это процесс преобразования объекта подкласса в его ссылку на суперкласс, а понижение — это процесс преобразования ссылки на суперкласс в его объект подкласса.

Восходящее приведение полезно для написания универсального кода, который может обрабатывать различные типы объектов, а понижающее приведение полезно для доступа к определенным методам и атрибутам объекта подкласса, которых нет в его суперклассе. Однако приведение к понижению следует использовать с осторожностью, так как это может привести к ошибкам во время выполнения.

Квалифицированный Java-разработчик может воплотить ваши идеи в жизнь и обеспечить бесперебойную работу вашего программного обеспечения. Не ждите больше, чтобы вывести свой бизнес на новый уровень — наймите разработчика Java прямо сейчас и начните создавать приложения, которые помогут вам добиться успеха!

Первоначально опубликовано на https://www.devstringx.com 15 марта 2023 г.