Оператор instanceof. Визначення типу об’єкту. Приклади
Зміст
- 1. Призначення оператора instanceof. Загальна форма
- 2. Застосування instanceof для класів, що утворюють ієрархію. Приклад
- 3. Застосування instanceof для типу Object. Приклад
- 4. Застосування instanceof для посилання на базовий клас. Приклад
- Зв’язані теми
Пошук на інших ресурсах:
1. Призначення оператора instanceof. Загальна форма
Оператор instanceof використовується для визначення типу об’єкту під час виконання програми. Визначивши тип об’єкту можна реалізувати коректне приведення типів у випадку, коли класи утворюють ієрархію. Якщо виконати некоректне приведення до деякого типу, то на етапі виконання буде згенерована виключна ситуація, що є неприйнятним.
Загальна форма оператора instanceof наступна
reference instanceof type
тут
- reference – посилання на об’єкт (екземляр) класу;
- type – тип класу.
Результатом роботи оператора instanceof є значення true або false. Результат true повертається у випадках:
- якщо посилання reference відноситься до вказаного типу;
- якщо посилання reference може бути приведене до вказаного типу.
В інших випадках повертається значення false.
⇑
2. Застосування instanceof для класів, що утворюють ієрархію. Приклад
У прикладі демонструється коректне визначення типу, до якого належить об’єкт класу. Реалізовано два класи A та B, які утворюють ієрархію. З метою демонстрації визначається тип відповідного об’єкту з врахуванням того, що успадкований клас розширює можливості суперкласу.
// Оператор instanceof // Суперклас A class A { int a; } // Клас B – успадковує клас A class B extends A { int b; } public class TestInstanceOf { public static void main(String[] args) { A objA = new A(); B objB = new B(); if (objA instanceof A) System.out.println("objA is a instance of A"); else System.out.println("objA is not an instance of A"); if (objA instanceof B) System.out.println("objA can be cast to type B"); else System.out.println("objA can not be cast to type B"); if (objB instanceof A) System.out.println("objB can be cast to type A"); else System.out.println("objB can not be cast to type A"); if (objB instanceof B) System.out.println("objB is a instance of B"); else System.out.println("objB is not an instance of B"); } }
Результат роботи програми
objA is a instance of A objA can not be cast to type B objB can be cast to type A objB is a instance of B
Як видно з результату, екземпляр успадкованого класу B може бути коректно приведений до суперкласу A. А от екземпляр суперкласу A не може бути розширений до можливостей успадкованого класу B.
⇑
3. Застосування instanceof для типу Object. Приклад
В об’єктній моделі мови Java всі створювані класи успадковані від класу Object. У нижченаведеному прикладі доводиться це твердження.
// Оператор instanceof // Суперклас A class A { int a; } // Підклас class B extends A { int b; } public class TestInstanceOf { public static void main(String[] args) { A objA = new A(); // екземпляр класу A B objB = new B(); // екземпляр класу B // Перевірка на успадкування від Object if (objA instanceof Object) System.out.println("objA can be cast to type Object"); else System.out.println("objA can not be cast to type Object"); if (objB instanceof Object) System.out.println("objB can be cast to type Object"); else System.out.println("objB can not be cast to type Object"); } }
Результат роботи програми
objA can be cast to type Object objB can be cast to type Object
⇑
4. Застосування instanceof для посилання на базовий клас. Приклад
Якщо класи утворюють ієрархію успадкування, то посилання на суперклас може отримувати значення екземплярів будь-якого похідного класу. У прикладі нижче демонструється визначення того, чи може посилання на суперклас бути приведене до типу похідного класу.
// Оператор instanceof // Суперклас A class A { int a; } // Підклас B class B extends A { int b; } // Підклас C class C extends B { int c; } // Підклас D class D extends C { int d; } public class TestInstanceOf { public static void main(String[] args) { // екземпляри класів A, B, C, D A objA = new A(); B objB = new B(); C objC = new C(); D objD = new D(); // посилання на суперклас A A refA; // Посиланню на суперклас можна присвоювати значення // екземплярів (посилань на екземпляри) похідних класів refA = objA; if (refA instanceof A) System.out.println("refA is an instance of A"); else System.out.println("refA is not an instance of A"); // Перенаправити посилання на екземпляр objB refA = objB; if (refA instanceof B) System.out.println("refA can be cast to type B"); else System.out.println("refA can not be cast to type B"); if (refA instanceof D) System.out.println("refA can be cast to type D"); else System.out.println("refA can not be cast to type D"); // Посилання на objC refA = objC; if (refA instanceof B) System.out.println("refA can be cast to type B"); else System.out.println("refA can not be cast to type B"); } }
Результат роботи програми
refA is an instance of A refA can be cast to type B refA can not be cast to type D refA can be cast to type B
⇑
Зв’язані теми
⇑