Java-面向对象(高级篇)--instanceof关键字

来源:互联网 发布:python urlencode gbk 编辑:程序博客网 时间:2024/05/29 12:17

instanceof关键字
在Java中可以使用instanceof关键字判断一个对象到底是哪个类的实例,格式如下:

对象 instanceof 类——>返回 Boolean 类型;

【验证instanceof关键字的作用】

class A{    public void fun1(){        System.out.println("A--》public void fun1()");    }    public void fun2(){        this.fun1();    }}class B extends A{    public void fun1(){        System.out.println("B-->public void fun2()");    }    public void fun3(){        System.out.println("B-->public void fun3()");    }}public class InstanceofDemo{    public static void main(String[] args){        A a1=new B();//向上转型        System.out.println("A a1=new B():"+(a1 instanceof A));        System.out.println("A a1=new B():"+(a1 instanceof B));        A a2=new A();//通过A类中的构造方法实例化本类对象        System.out.println("A a2=new B():"+(a2 instanceof A));        System.out.println("A a2=new B():"+(a2 instanceof B));    }}

运行结果为:

A a1=new B():trueA a1=new B():trueA a2=new B():trueA a2=new B():false

从以上程序发现,通过子类实例化的对象同时也是子类和父类的实例,所以可以直接进行向上或者向下转型,但是如果直接使用了父类实例化本类对象,则一定就不在是子类实例了,所以还是不能转型的。在进行对象的向下转型前最好进行判断在进行相应操作。
【在向下转型前进行验证】

class A{    public void fun1(){        System.out.println("A-->public void fun1()");    }    public void fun2(){        this.fun1();    }}class B extends A{    //覆写A中的方法    public void fun1(){        System.out.println("B-->public void fun1()");    }    //子类中自己定义的方法    public void fun3(){        System.out.println("B-->poublic void fun3()");    }}class C extends A{    public void fun1(){        System.out.println("C-->public void fun1()");    }    public void fun5(){        System.out.println("C-->public void fun3()");    }}public class PolDemo04{    public static void main(String[] args){        fun(new B());//传递B类实例,产生向上转型        fun(new C());//传递C类实例,产生向上转型    }    public static void fun(A a){//接收父类对象        a.fun1();        if(a instanceof B){            B b=(B)a;//向下转型            b.fun3();//调用子类自己定义的方法        }        if(a instanceof C){            C c=(C)a;//向下转型            c.fun5();//调用子类自己定义的方法        }    }}

运行结果:

B-->public void fun1()B-->poublic void fun3()C-->public void fun1()C-->public void fun3()

在上面的fun()方法中因为要调用各个子类自己的方法,所以必须进行对象的向下转型,但是为了保证程序进行时不出现转型异常,所以在发生转型时进行检验,以保证程序的运行正常

0 0