Java Instanceof关键字,你会用么?

2020-12-31 13:59:31 浏览数 (2415)

a instanceof A:关键字的作用就是判断类 A 的实例化对象能不能赋给对象 a,返回一个 boolean 类型的数据。推荐好课:Java微课Java进阶:Web开发实战

举例:

class A{

    public void eat() {

        System.out.println("父类A吃饭");

    }

}

class B extends A{

    public void eat() {

        System.out.println("子类B吃饭");

    }

}

class C extends A{

    public void eat() {

        System.out.println("子类C吃饭");

    }

}

public class Shiyan {

    public static void main(String[] args) {

    // TODO Auto-generated method stub

        A a=new B();//向上转型,将类B的实例化赋给类A的对象

        a.eat();//通过类A的对象去调用,类B的eat方法

        // a instanceof A 关键字的作用就是判断 类A的实例化对象能不能赋给对象a。

    C c=(C)a;//使用强制转换,将B类的实例化对象强制转成C的实例化对象。编译器可以编译,但是运行时会报转换异常的错误。

    a.eat();

}

未使用Instanceof关键字运行如下:

编译器报了类型转换异常

子类B吃饭
Exception in thread "main" java.lang.ClassCastException: class polymorphism.B cannot be cast to class polymorphism.C (polymorphism.B and polymorphism.C are in unnamed module of loader 'app')
 at polymorphism.Shiyan.main(Shiyan.java:28)

改进后使用关键字Instanceof代码:

此时使用关键字Instanceof,判断是否能转换成功

class A{

    public void eat() {

        System.out.println("父类A吃饭");

    }

}

class B extends A{

    public void eat() {

        System.out.println("子类B吃饭");

    }

}

class C extends A{

    public void eat() {

        System.out.println("子类C吃饭");

    }

}

public class Shiyan {

    public static void main(String[] args) {

    // TODO Auto-generated method stub

        A a=new B();//向上转型,将类B的实例化赋给类A的对象

        a.eat();//通过类A的对象去调用,类B的eat方法

        // a instanceof A 关键字的作用就是判断 类A的实例化对象能不能赋给对象a。

    boolean isturue=a instanceof C;

    System.out.println(isturue);

}

改进后运行结果:
子类B吃饭
false