`
chaoyi
  • 浏览: 292223 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

instanceof关键字

 
阅读更多

本章目标
掌握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(){}
 * */
}

 

 

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics