使用instanceof运算符

时间:2016-07-03 22:58:05

标签: java

此代码表示将在此处执行向下转换,不会抛出任何异常。但是对象(a)已经是类Dog3,那么为什么要再次向下转换它?当我创建这个对象(a)的类动物,然后试图向下转换它时抛出异常。但是在java tpoint中它说这可以用instanceof运算符。是这样吗?

class Animal 
{
 }  

class Dog3 extends Animal 
{  
  static void method(Animal a)
 {  
    if(a instanceof Dog3){  
       Dog3 d=(Dog3)a;//downcasting  
       System.out.println("ok downcasting performed");  
    }  
  }  

  public static void main (String [] args)
 {  
    Animal a=new Dog3();  
    Dog3.method(a);  
  }  

 }  

2 个答案:

答案 0 :(得分:1)

您的对象(在堆上)的类型为Dog3,当然不会改变。但是指向它的引用可以是Dog3anything super Dog3,如果要使用Dog3引用,则应该更改它,例如使用{{1}中的某些特定方法} class

答案 1 :(得分:0)

例如,如果将以下内容添加到主方法中:

  public static void main (String [] args)
  {  
    Animal a=new Dog3();  
    Dog3.method(a); 
    Animal a2 = new Animal();
    Dog3.method( a2 ); 
  }  

method的第二次调用中,不会发生向下转换。第二次调用显示可以将Animal传递给您的方法,因此您必须在方法体中考虑这种可能性,或者有时您的方法会抛出异常。

相关问题