– Cześć, Amigo! Spotkałeś się już z operatorem instanceof. Operator instanceof to proste w użyciu oraz wydajne narzędzie. Opowiem ci dzisiaj, jak i kiedy można je stosować.
– Brzmi jak reklama!
– To bardzo proste. Używamy go w następujący sposób: «obiekt» instanceof «klasa».
Jego zadaniem jest sprawdzanie, czy obiekt stanowi instancję określonej klasy. W praktyce jest to dużo prostsze, niż się wydaje. Spójrz na ten przykład:
Kod | Opis |
---|---|
|
isInt będzie true. Obiekt, do którego odnosi się zmienna o, jest instancją klasy Integer. |
|
isInt będzie false. Obiekt, do którego odnosi się zmienna o, nie jest instancją klasy Integer. To obiekt typu String. |
|
isFIS będzie true. Obiekt, do którego odnosi się zmienna is, jest instancją klasy FileInputStream. |
– Tak, to rzeczywiście bardzo proste.
– Operator ten bierze także pod uwagę dziedziczenie. Sprawdź, jak to działa.
Kod | Opis |
---|---|
|
Mamy tutaj deklaracje trzech klas: Animal, Cat oraz Tiger. Cat dziedziczy Animal. Za to Tiger dziedziczy Cat. |
|
isCat będzie true. isTiger będzie true. isAnimal będzie true. |
|
isCat będzie false. isTiger będzie false. isAnimal będzie true. |
I podobnie z interfejsami:
Kod | Opis |
---|---|
|
Stwórz dwie klasy: Cat, TomCat oraz interfejs Moveable |
|
isCat będzie true. isMoveable będzie true. isTom będzie true. |
|
isCat będzie true. isMoveable będzie false. isTom będzie false. |
Z operatora instanceof korzystamy w następujący sposób: a instanceof B.
Oznacza to, że operator instanceof zwróci true, jeśli:
1) zmienna a przechowuje referencję do obiektu typu B
2) zmienna a przechowuje referencję a do obiektu, którego klasa dziedziczy B
3) zmienna a przechowuje referencję a do obiektu, który implementuje interfejs B
W każdym innym przypadku operator instanceof zwróci false.
– Kumam. Ale dlaczego jest to konieczne, wujku Raszi?
– Basia Ci o tym dzisiaj opowie. To naprawdę przydatny operator. Sam za chwilę się o tym przekonasz.