最近我正在系统性地过一遍Java的基础,在学习过程中,发现instanceof关键字有些地方不是很清晰,想要探究一些特殊情况下他的返回值,比如说在多态的条件下,这个关键字是如何判定的。接下来就对instanceof这个关键字进行讲解,以及实例演示。
首先来讲讲instanceof这个关键字的作用:
instanceof,它的作用是判断其左边对象是否为其右边类的实例,返回boolean类型的数据。可以用来判断继承中的子类的实例是否为父类的实现。
在Java中instanceof在判断时会有两种状态,一种是在编译状态下报错,另一种就是在运行状态下返回true 和 false。
那么什么时候会在编译的时候就报错呢,和返回false的区别在哪?
不过这篇文章更多的是探讨多态的情况下,instanceof该怎么判断?
先上代码:
public class InstanceTest1 {
public static void main(String[] args) {
Person p1 = new Student();
Person p2 = new Person();
Student s1 = new Student();
System.out.println(p1 instanceof Object); //true
System.out.println(p1 instanceof Person); //true
System.out.println(p1 instanceof Student); //true
System.out.println(p1 instanceof Teacher); //false
//System.out.println(p1 instanceof Car); 编译就报错了
System.out.println("=======================");
System.out.println(p2 instanceof Object); //true
System.out.println(p2 instanceof Person); //true
System.out.println(p2 instanceof Student); //false
System.out.println(p2 instanceof Teacher); //false
System.out.println("=======================");
System.out.println(s1 instanceof Object); //true
System.out.println(s1 instanceof Person); //true
System.out.println(s1 instanceof Student); //true
//System.out.println(s1 instanceof Teacher); 编译报错
//System.out.println(s1 instanceof Car); 编译报错
}
}
class Person {
}
class Student extends Person{
}
class Teacher extends Person{
}
class Car{
}
在这份代码中总共有四个类:Person、Student、Teacher、Car
其中Student和Teacher都是Person的子类,而Car与其三者皆无关
从代码的实验中总结出来在多态的情况下的几条规则:
在编译状态下:
在运行状态下:
总的来说,instanceof就是用来判断该对象是否是右边的类或者右边类的子类所创建的,如果是则返回true,否则返回false。
那么讲到这里,我们的instanceof到底有什么具体应用呢?
使用同一个方法,然后根据你所创建的对象,去判断属于哪一个类,然后应该执行哪一个操作,可以说也是多态的一种体现方式,主要是结合方法一起使用,方法的参数那里可以填Object obj,这样,通过传入的对象再在方法内进行判断。主要还是使用多态的方式去调用方法。所以,instanceof还是很重要的,在多态调用方法的时候起到一个核心的作用。
instanceof这个关键字主要是体现Java特性中的多态,主要还是在多态里应用,大家可以通过日后遇到的实际问题再去加深对instanceof实际应用的理解。这里就是我自己对于instanceof这个关键字的理解,如果有什么谬误还请各位大佬指正,感谢万分