作用:判断一个对象是否属于一个类
格式:对象+instanceof+类 返回布尔类型
运用之前的Animal类:
package m12d27;
public class Animal {
public void say(){
System.out.println("我是一个动物");
}
}
两个子类:
package m12d27;
public class Cat extends Animal{
public void say(){
System.out.println("我是一只猫");
}
}
package m12d27;
public class Dog extends Animal{
public void say(){
System.out.println("我是一只狗");
}
}
测试类:
package m12d27;
public class Test {
public static void main(String[] args) {
Animal a=new Dog();
System.out.println(a instanceof Animal);
System.out.println(a instanceof Dog);
System.out.println(a instanceof Cat);
}
}
可以看出,a属于Animal类,也属于Dog类,因为向上转型;
a不属于Cat,因此返回false;
true
true
false
在进行向下转型的过程中,我们需要知道某个对象是否属于某个类,因此可以用到Instanceof关键字;
比如现在在每个子类里面加上自己的方法:
package m12d27;
public class Dog extends Animal{
public void say(){
System.out.println("我是一只狗");
}
public void f1(){
System.out.println("汪汪汪...");
}
}
package m12d27;
public class Cat extends Animal{
public void say(){
System.out.println("我是一只猫");
}
public void f2(){
System.out.println("喵喵喵...");
}
}
package m12d27;
public class Test {
public static void dosomething(Animal a){
a.say();
/**
* 向下转型的过程中,如果属于Dog类,调用f1方法
* 如果属于Cat类,调用f2方法
*/
if(a instanceof Dog){
((Dog) a).f1();
}else if(a instanceof Cat){
((Cat) a).f2();
}
}
public static void main(String[] args) {
Animal a=new Dog();
System.out.println(a instanceof Animal);
System.out.println(a instanceof Dog);
System.out.println(a instanceof Cat);
//进行向下转型,需要先判断是属于哪个类,再来转型
dosomething(new Dog());
dosomething(new Cat());
}
}
输出结果为:
true
true
false
我是一只狗
汪汪汪...
我是一只猫
喵喵喵...
可以看出,在向下转型的过程中,是先判断属于哪个类,再进行调用各自类的方法;