Java-面向对象(高级篇)--instanceof关键字
2016-10-14 20:50
302 查看
instanceof关键字
在Java中可以使用instanceof关键字判断一个对象到底是哪个类的实例,格式如下:
【验证instanceof关键字的作用】
运行结果为:
从以上程序发现,通过子类实例化的对象同时也是子类和父类的实例,所以可以直接进行向上或者向下转型,但是如果直接使用了父类实例化本类对象,则一定就不在是子类实例了,所以还是不能转型的。在进行对象的向下转型前最好进行判断在进行相应操作。
【在向下转型前进行验证】
运行结果:
在上面的fun()方法中因为要调用各个子类自己的方法,所以必须进行对象的向下转型,但是为了保证程序进行时不出现转型异常,所以在发生转型时进行检验,以保证程序的运行正常。
在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():true A a1=new B():true A a2=new B():true A 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()方法中因为要调用各个子类自己的方法,所以必须进行对象的向下转型,但是为了保证程序进行时不出现转型异常,所以在发生转型时进行检验,以保证程序的运行正常。
相关文章推荐
- 面向对象(高级)————instanceof关键字
- Java面向对象高级--instanceof关键字
- 面向对象(高级)————instanceof关键字
- Java-面向对象(高级篇)--final关键字
- java 第十一天 面向对象(高级篇之接口、对象的多态性,instanceof)
- Java面向对象instanceof关键字
- 面向对象高级续2(instanceof关键字、抽象类和接口的应用、Object类、包装类)
- Java中的instanceof关键字
- 深入Java关键字instanceof
- java基础4--面向对象(下)(继承、final关键字)
- java基础3--面向对象(上)(static关键字与main方法)
- Java复习总结:Java面向对象程序设计—面向对象(高级篇)
- Java中的instanceof关键字
- Java中的instanceof关键字
- Java中的instanceof关键字
- [Java] instanceof关键字
- Java中的instanceof关键字
- Java中的instanceof关键字
- Java中的instanceof关键字
- java基础整理5--面向对象的高级特性