使用instanceof运算符进行向下转换

时间:2016-01-30 08:43:59

标签: java

向下转换是指子类引用父类的对象。我试过没有instanceof运算符。

class Food { }  
class bread4 extends Food {  
  static void method(Food a) {  
       bread4 b=(bread4)a;
       System.out.println("ok downcasting performed");  
  }  
   public static void main (String [] args) {  
    Food a=new bread4();  
    bread4.method(a);  
  }  
}  

任何人都可以通过使用instanceof运算符来帮助我吗?

2 个答案:

答案 0 :(得分:2)

instanceof 运算符提供运行时类型检查。例如,如果你有一个Food类和两个子类型,Bread4和Bread5,那么:

static void method(Food a) {
   Bread4 b = (Bread4) a;
   System.out.println("Downcasting performed"); 
}

调用此方法,如:

Food four = new Bread4();
Food five = new Bread5();
Bread4.method(four); //the cast inside is done to Bread4, therefore this would work
Bread4.method(five); //the object of type Bread5 will be cast to Bread4 -> ClassCastException

为避免这种情况,请使用 instanceof 运算符

static void method(Food a) {
   if (a instanceof Bread4) {
       Bread4 b = (Bread4) a;
       System.out.println("Downcasting performed"); 
   }
}

因此,如果你打电话

Bread4.method(five)

检查返回false,因此不会发生ClassCastException。

希望这能回答你的问题。

答案 1 :(得分:1)

以下是使用instanceof运算符的方法:

static void method(Food a) {
    if (a instanceof bread4) {
        bread4 b = (bread4) a;
        System.out.println("Downcasting performed");
    }
}

instanceof运算符在左侧获取一个对象,并检查它是否是右侧参数的一个实例。

obj instanceof Claz

如果true的班级是obj的实例,则会返回Claz

另外,我还强烈建议您遵循Java命名约定。不要命名您的班级bread4,而是将其命名为Bread4

类应以大写字母开头,而变量和方法应以小写字母开头。