Typecasting w Javie to proces konwertowania jednego typu danych na inny typ danych za pomocą operatora rzutowania. Kiedy przypisujesz wartość z jednego pierwotnego typu danych do innego typu, nazywa się to rzutowaniem typu. Aby umożliwić użycie zmiennej w określony sposób, metoda ta wymaga jawnego poinstruowania kompilatora Java, aby traktował zmienną jednego typu danych jako zmienną innego typu danych.
Składnia:
variableName = () value;>
Rodzaje odlewania typów
W Javie istnieją dwa typy rzutowania typów:
- Odlew typu poszerzającego
- Wąski odlew typu
Odlew typu poszerzającego
Niższy typ danych jest przekształcany na wyższy w procesie znanym jako rzutowanie typu rozszerzającego. Niejawne rzutowanie typów i rzutowanie w dół to tylko niektóre nazwy tego zjawiska. Występuje naturalnie. Ponieważ nie ma ryzyka utraty danych, są one bezpieczne. Rzutowanie typu poszerzającego ma miejsce, gdy:
- Typ docelowy musi być większy niż typ źródłowy.
- Obydwa typy danych muszą być ze sobą kompatybilne.
Składnia:
larger_data_type variable_name = smaller_data_type_variable;>
Jawa
// Java program to demonstrate Widening TypeCasting> import> java.io.*;> > class> GFG {> >public> static> void> main(String[] args)> >{> >int> i =>10>;> > >// Wideing TypeCasting (Automatic Casting)> >// from int to long> >long> l = i;> > >// Wideing TypeCasting (Automatic Casting)> >// from int to double> >double> d = i;> > >System.out.println(>'Integer: '> + i);> >System.out.println(>'Long: '> + l);> >System.out.println(>'Double: '> + d);> >}> }> |
>
połączona lista Java
>Wyjście
Integer: 10 Long: 10 Double: 10.0>
Wąski odlew typu
Proces zmniejszania rozmiaru większego typu danych do mniejszego nazywany jest rzutowaniem typu zawężającego. Rzucanie lub jawne rzutowanie typów to inne nazwy tego zjawiska. To nie dzieje się samo. Jeśli nie zrobimy tego wyraźnie, wystąpi błąd w czasie kompilacji. Zawężanie rzutowania typów jest niebezpieczne, ponieważ może nastąpić utrata danych z powodu mniejszego zakresu dozwolonych wartości niższego typu danych. Operator rzutowania pomaga w procesie jawnego rzutowania.
Składnia:
smaller_data_type variable_name = (smaller_data_type) larger_data_type_variable;>
Przykład:
Jawa
// Java Program to demonstrate Narrow type casting> import> java.io.*;> > class> GFG {> >public> static> void> main(String[] args)> >{> >double> i =>100.245>;> > >// Narrowing Type Casting> >short> j = (>short>)i;> >int> k = (>int>)i;> > >System.out.println(>'Original Value before Casting'> >+ i);> >System.out.println(>'After Type Casting to short '> >+ j);> >System.out.println(>'After Type Casting to int '> >+ k);> >}> }> |
>
>Wyjście
Original Value before Casting100.245 After Type Casting to short 100 After Type Casting to int 100>
Rodzaje jawnego castingu
Zasadniczo istnieją dwa typy rzucania jawnego:
- Wyraźne przesyłanie w górę
- Wyraźne poniżanie
Wyraźne przesyłanie w górę
Przesyłanie w górę to proces rzutowania podtypu na nadtyp w górę drzewa dziedziczenia. Kiedy do obiektu podklasy odwołuje się zmienna referencyjna nadklasy, bez żadnego dodatkowego wysiłku uruchamiany jest automatyczny proces.
Przykład:
Jawa
// Java Program to demonstrate Explicit Upcasting> import> java.io.*;> > class> Animal {> >public> void> makeSound()> >{> >System.out.println(>'The animal makes a sound'>);> >}> }> > class> Dog>extends> Animal {> >public> void> makeSound()> >{> >System.out.println(>'The dog barks'>);> >}> > >public> void> fetch()> >{> >System.out.println(>'The dog fetches a ball'>);> >}> }> class> GFG {> >public> static> void> main(String[] args)> >{>// Upcasting> >Animal animal =>new> Dog();> >// Calls the overridden method in Dog class> >animal.makeSound();> >// This would give a compile error as fetch() is not> >// a method in Animal class> >// animal.fetch();> >}> }> |
>
>Wyjście
The dog barks>
Wyraźne poniżanie
Kiedy typ podklasy odwołuje się do obiektu klasy nadrzędnej, proces ten nazywa się downcastingiem. Jeśli zostanie to zrobione ręcznie, kompilator generuje błąd ClassCastException w czasie wykonywania. Można to zrobić jedynie za pomocą operatora instancjiof. Możliwe jest jedynie opuszczenie obiektu, który został już podniesiony.
Przykład:
Jawa
// Java Program to demonstrate Explicit downcasting> import> java.io.*;> class> Animal {> >public> void> eat()> >{> >System.out.println(>'The animal is eating.'>);> >}> }> > class> Cat>extends> Animal {> >public> void> meow()> >{> >System.out.println(>'The cat is meowing.'>);> >}> }> > class> GFG {> >public> static> void> main(String[] args)> >{> >Animal animal =>new> Cat();> >animal.eat();> > >// Explicit downcasting> >Cat cat = (Cat)animal;> >cat.meow();> >}> }> |
>
>Wyjście
The animal is eating. The cat is meowing.>