Процес перетворення одного типу даних в інший відомий як Приведення типів і Перетворення і Зниження це тип приведення типів об’єктів. У Java об’єкт також може бути приведений до типу, як і типи даних. Батько і дитина об'єкти - це два типи об'єктів. Отже, для об’єкта можливі два типи приведення типів, тобто Від батьків до дитини і Дитина до батьків або можна сказати Перетворення і Зниження .
в Java , об’єкт також може бути приведений до типу, як і типи даних. Батько і Дочірні об'єкти є два типи об'єктів. Отже, для об’єкта можливі два типи приведення типів, тобто Від батьків до дитини і Дитина до батьків або можна сказати Перетворення і Зниження .
Приведення типів використовується, щоб переконатися, що змінні правильно обробляються функцією чи ні. в Перетворення і Зниження , ми вводимо дочірній об'єкт до батьківського об'єкта і батьківський об’єкт до дочірнього об’єкта одночасно. Ми можемо виконати висхідну трансляцію неявно або явно, але низхідна трансляція не може бути неявно можливою.
Давайте детально заглибимося в обидва типи приведення об’єктів:
java catch спроба
1) Перетворення
Перетворення це тип приведення типів об’єктів, у якому a дочірній об'єкт приводиться до a об'єкт батьківського класу . Використовуючи Upcasting, ми можемо легко отримати доступ до змінних і методів батьківського класу до дочірнього класу. Тут ми не маємо доступу до всіх змінних і методу. Ми отримуємо доступ лише до певних змінних і методів дочірнього класу. Перетворення також відомий як Узагальнення і Розширення .
UpcastingExample.java
class Parent{ void PrintData() { System.out.println('method of parent class'); } } class Child extends Parent { void PrintData() { System.out.println('method of child class'); } } class UpcastingExample{ public static void main(String args[]) { Parent obj1 = (Parent) new Child(); Parent obj2 = (Parent) new Child(); obj1.PrintData(); obj2.PrintData(); } }
Вихід:
2) Зниження
Перетворення це інший тип приведення типів об’єктів. У Upcasting ми призначаємо дочірньому класу посилання на батьківський клас. У Java ми не можемо призначити об’єкт посилання батьківського класу на дочірній клас, але якщо ми виконаємо низхідне приведення, ми не отримаємо жодної помилки під час компіляції. Однак, коли ми запускаємо його, він викидає 'ClassCastException' . Справа в тому, що якщо в Java неможливе низведення, то чому це дозволено компілятором? У Java деякі сценарії дозволяють виконувати низхідне приведення. Тут на об’єкт підкласу посилається батьківський клас.
хеш-таблиця проти хеш-карти
Нижче наведено приклад низхідного приведення, у якому пояснюються як дійсний, так і неприпустимий сценарії:
DowncastingExample.java
алфавіт до числа
//Parent class class Parent { String name; // A method which prints the data of the parent class void showMessage() { System.out.println('Parent method is called'); } } // Child class class Child extends Parent { int age; // Performing overriding @Override void showMessage() { System.out.println('Child method is called'); } } public class Downcasting{ public static void main(String[] args) { Parent p = new Child(); p.name = 'Shubham'; // Performing Downcasting Implicitly //Child c = new Parent(); // it gives compile-time error // Performing Downcasting Explicitly Child c = (Child)p; c.age = 18; System.out.println(c.name); System.out.println(c.age); c.showMessage(); } }
Вихід:
Навіщо нам потрібні Upcasting і Downcasting?
У Java ми рідко використовуємо Перетворення . Ми використовуємо його, коли нам потрібно розробити код, який має справу лише з батьківським класом. Зниження використовується, коли нам потрібно розробити код, який отримує доступ до поведінки дочірнього класу.
Різниця між підвищенням і пониженням
Це такі відмінності між Upcasting і Downcasting:
Так ні | Перетворення | Зниження |
---|---|---|
1. | Дочірній об’єкт приводиться до батьківського об’єкта. | Посилання на об'єкт батьківського класу передається в дочірній клас. |
2. | Ми можемо виконати Upcasting неявно або явно. | Імпліцитне низведення неможливе. |
3. | У дочірньому класі ми можемо отримати доступ до методів і змінних батьківського класу. | Можна отримати доступ до методів і змінних обох класів (батьківського та дочірнього). |
4. | Ми можемо отримати доступ до певних методів дочірнього класу. | До всіх методів і змінних обох класів можна отримати доступ, виконавши низхідне приведення. |
5. | Батьківський p = новий батьківський() | Батьківський p = новий Child() Дитина c = (Дитина)p; |