Приведення типів є однією з найважливіших концепцій, яка в основному стосується перетворення одного типу даних в інший тип даних неявно або явно. У цій статті обговорюється концепція приведення типів для об’єктів.
Як і типи даних, об’єкти також можуть бути приведені до типів. Однак в об’єктах є лише два типи об’єктів, тобто батьківський об’єкт і дочірній об’єкт. Таким чином, приведення типів об’єктів в основному означає, що один тип об’єкта (тобто) дочірнього або батьківського типу до іншого. Існує два типи приведення типів. Вони є:
- Upcasting: Upcasting — це приведення типів дочірнього об’єкта до батьківського об’єкта . Переведення може бути виконане неявно. Upcasting дає нам гнучкість доступу до членів батьківського класу, але за допомогою цієї функції неможливо отримати доступ до всіх членів дочірнього класу. Замість усіх членів ми можемо отримати доступ до певних членів дочірнього класу. Наприклад, ми можемо отримати доступ до перевизначених методів. Зниження: аналогічно, пониження означає приведення типу a батьківський об’єкт до дочірнього об’єкта . Зниження не може бути неявним.
Наступне зображення ілюструє концепцію висхідного та низхідного кастингу:

приклад: Нехай буде батьківський клас. У одного з батьків може бути багато дітей. Візьмемо до уваги одного з дітей. Дитина успадковує властивості батька. Таким чином, між дитиною і батьком існують стосунки. Тому дитина може бути неявно піднятий до батьків. Однак один із батьків може успадкувати або не успадкувати власність дитини. Однак ми можемо примусово перевести батьківського елемента в дочірній, який відомий як опускання . Після того, як ми явно визначаємо цей тип приведення, компілятор перевіряє у фоновому режимі, чи можливий цей тип приведення. Якщо це неможливо, компілятор видає ClassCastException.
Давайте розберемося з наступним кодом, щоб зрозуміти різницю:
Java
// Java program to demonstrate> // Upcasting Vs Downcasting> // Parent class> class> Parent {> >String name;> >// A method which prints the> >// signature of the parent class> >void> method()> >{> >System.out.println(>'Method from Parent'>);> >}> }> // Child class> class> Child>extends> Parent {> >int> id;> >// Overriding the parent method> >// to print the signature of the> >// child class> >@Override> void> method()> >{> >System.out.println(>'Method from Child'>);> >}> }> // Demo class to see the difference> // between upcasting and downcasting> public> class> GFG {> >// Driver code> >public> static> void> main(String[] args)> >{> >// Upcasting> >Parent p =>new> Child();> >p.name =>'techcodeview.com'>;> >//Printing the parentclass name> >System.out.println(p.name);> >//parent class method is overridden method hence this will be executed> >p.method();> >// Trying to Downcasting Implicitly> >// Child c = new Parent(); ->помилка часу компіляції> >// Downcasting Explicitly> >Child c = (Child)p;> >c.id =>1>;> >System.out.println(c.name);> >System.out.println(c.id);> >c.method();> >}> }> |
>
>Вихід
techcodeview.com Method from Child techcodeview.com 1 Method from Child>
Ілюстративний малюнок програми вище:

З наведеного вище прикладу ми можемо помітити наступні моменти:
- Синтаксис upcasting:
Parent p = new Child();>
- Переведення буде виконано внутрішньо, і завдяки такому переведенню об’єкту буде дозволено доступ лише до членів батьківського класу та визначених членів дочірнього класу (перевизначені методи тощо), але не до всіх членів.
// This variable is not // accessible p.id = 1;>
- Синтаксис перетворення вниз:
Child c = (Child)p;>
- Понижене приведення повинно виконуватися ззовні, і завдяки переведенню дочірній об’єкт може отримати властивості батьківського об’єкта.
c.name = p.name; i.e., c.name = 'techcodeview.com'>