Процес на преобразуване на един тип данни в друг е известен като Преобразуване на типове и Възходящо предаване и Даункастинг е типът на преобразуване на обекти. В Java обектът може също да бъде типизиран като типовете данни. Родител и дете обектите са два вида обекти. И така, има два вида възможни типове за обект, т.е. Родител на дете и Дете към родител или може да се каже Възходящо предаване и Даункастинг .
в Java , обектът може също да бъде типизиран като типовете данни. Родител и Детски обекти са два вида обекти. И така, има два вида възможни типове за обект, т.е. Родител на дете и Дете към родител или може да се каже Възходящо предаване и Даункастинг .
Преобразуване на типове се използва, за да се гарантира дали променливите се обработват правилно от функция или не. в Възходящо предаване и Даункастинг , ние набираме дъщерен обект към родителски обект и родителски обект към дъщерен обект едновременно. Можем да извършим Upcasting имплицитно или експлицитно, но downcasting не може да бъде имплицитно възможно.
Нека се потопим в дълбочината на двата типа кастинг на обекти:
struct array c програмиране
1) Upcasting
Възходящо предаване е тип преобразуване на обекти, при което 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
Това са следните разлики между Upcasting и Downcasting:
Да не | Възходящо предаване | Даункастинг |
---|---|---|
1. | Дъщерен обект се привежда към родителски обект. | Референцията на обекта на родителския клас се предава на дъщерния клас. |
2. | Можем да извършим Upcasting имплицитно или явно. | Имплицитно понижаване не е възможно. |
3. | В дъщерния клас имаме достъп до методите и променливите на родителския клас. | Методите и променливите на двата класа (родител и дете) могат да бъдат достъпни. |
4. | Имаме достъп до някои определени методи на дъщерния клас. | Всички методи и променливи на двата класа могат да бъдат достъпни чрез извършване на низходящо предаване. |
5. | Родител p = нов родител() | Родител p = ново дете() Дете c = (Дете)p; |