Java知识点:instanceof关键字
介绍
- 格式:a instanceof B,其中a是一个variable(设a所指向的对象的类型命名为A,即A是一个type。
- 功能:判断A是否 is-a B。
- 当a=null时,始终返回false。
- 当B=Object时,始终返回true。
可能返回的结果
- true:A is-a B。
- false:
- B是一个类时,A和B在一棵继承树,但是A is-not-a B。
- B是一个接口时,A不是final的,A is-not-a B(不要求A和B要在一棵继承树上)。
- Compile Error
- B是一个类时,A和B不在一棵继承树上,则Compile Error。
- B是一个接口时,如果A是final的且A和B不在一棵继承树上,则Compile Error。
实验一:接口的情况
1 interface A{} 2 class B implements A{} 3 class C{} 4 final class D{} 5 class Demo01 6 { 7 public static void main(String args[]) 8 { 9 B b = new B(); 10 C c = new C(); 11 D d = new D(); 12 System.out.println(b instanceof A); //true 13 System.out.println(c instanceof A); //false 14 System.out.println(d instanceof A); //Compile Error:不可转换的类型 15 } 16 }
实验二:类的情况
1 public class Instanceof01 2 { 3 public static void main(String[] args) { 4 A a = new A(); 5 A b = new B(); 6 System.out.println((a instanceof B)); // A isn't-a B,因此输出false 7 System.out.println((b instanceof A)); // B is-a A,因此输出true 8 System.out.println((b instanceof B)); // B is-a B,因此输出true 9 System.out.println((a instanceof C)); // Compile Error:不可转换的类型,因为类A和类C不在一棵继承树上 10 } 11 } 12 class A{} 13 class B extends A{} 14 class C{}