欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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(){}
 * */
}

 

 

上一篇:

下一篇: