instanceof关键字
程序员文章站
2023-12-25 23:11:27
...
本章目标
掌握instanceof关键字的作用及使用时机
可以使用instanceof对对象的转型进行安全验证
instanceof 关键字
在java中可以使用instanceof关键字判断一个对象到底是那个类的实例
对象 instanceof 类 —> 返回boolean类型
验证instanceof关键字的作用
class A{//定义类 A
public void fun1(){//定义 fun1() 方法
System.out.println("A --> public void fun1(){}");
}
public void fun2(){//定义 fun2() 方法
this.fun1();
}
}
class B extends A{//子类通过 extends 继承父类
public void fun1(){//覆写父类中的 fun1() 方法
System.out.println("B --> public void fun1(){}");
}
public void fun3(){//子类自己定义的方法
System.out.println("B --> public void fun3(){}");
}
}
public class InstanceofDemo01 {
public static void main(String[] args) {
A a1 = new B();//通过向上转型实例化 A类对象
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 A():"+(a2 instanceof A));
System.out.println("A a2 = new A():"+(a2 instanceof B));
}
/*结果:
* B --> public void fun1(){}
* */
}
在向下转型前进行验证
class A{//定义类 A
public void fun1(){//定义 fun1() 方法
System.out.println("A --> public void fun1(){}");
}
public void fun2(){//定义 fun2() 方法
this.fun1();
}
}
class B extends A{//子类通过 extends 继承父类
public void fun1(){//覆写父类中的 fun1() 方法
System.out.println("B --> public void fun1(){}");
}
public void fun3(){//子类自己定义的方法
System.out.println("B --> public void fun3(){}");
}
}
class C extends A{//子类通过 extends 继承父类
public void fun1(){//覆写父类中的 fun1() 方法
System.out.println("C --> public void fun1(){}");
}
public void fun5(){//子类自己定义的方法
System.out.println("C --> public void fun5(){}");
}
}
public class InstanceofDemo02 {
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 = (B)a;//进行向下转型
b.fun3();//调用子类自己定义的方法
}
if(a instanceof C){//判断是否有 C 类实例
C c = (C)a;//进行向下转型
c.fun5();//调用子类自己定义的方法
}
}
/*结果:
* B --> public void fun1(){}
* B --> public void fun3(){}
* C --> public void fun1(){}
* C --> public void fun5(){}
* */
}