Java面向对象——instanceof关键字

作用:判断一个对象是否属于一个类

格式:对象+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
我是一只狗
汪汪汪...
我是一只猫
喵喵喵...

可以看出,在向下转型的过程中,是先判断属于哪个类,再进行调用各自类的方法; 

猜你喜欢

转载自blog.csdn.net/qq_37084904/article/details/85283566