新浪微博 Github

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{}

 

posted @ 2013-08-18 23:30  xiazdong  阅读(294)  评论(0编辑  收藏  举报