instanceof
instanceof 是 Java 的一个二元操作符,类似于 ==,>,< 等操作符。
instanceof 是 Java 的保留关键字。它的作用是测试它左边的对象是否是它右边的类的实例,返回 boolean 的数据类型。
创建一个 Person 类,定义 run() 方法
public class Person {
public void run() {
System.out.println("run");
}
}
再定义两个类继承 Person 类
public class Student extends Person {}
public class Teacher extends Person {}
启动类 Application
public class Application {
public static void main(String[] args) {
// 所有类都默认继承 Object 类
// Object > Person > Student
// Object > Person > Teacher
// Object > String
Object object = new Student();
System.out.println(object instanceof Student); // true
System.out.println(object instanceof Person); // true
System.out.println(object instanceof Object); // true
System.out.println(object instanceof Teacher); // false
System.out.println(object instanceof String); // false
Person person = new Person();
System.out.println(person instanceof Student); // true
System.out.println(person instanceof Person); // true
System.out.println(person instanceof Object); // true
System.out.println(person instanceof Teacher); // false
// System.out.println(person instanceof String); // 编译报错
// Person 和 String 毫无关系,所以不能用于比较,才会编译就报错
Student student = new Student();
System.out.println(person instanceof Student); // true
System.out.println(person instanceof Person); // true
System.out.println(person instanceof Object); // true
// System.out.println(person instanceof Teacher); // 编译报错
// System.out.println(person instanceof String); // 编译报错
}
}
类型转换
创建一个 Person 类,定义 run() 方法
public class Person {
public void run() {
System.out.println("run");
}
}
创建一个 Student 类继承 Person 类,并定义一个 go 方法
public class Student extends Person {
public void go() {
System.out.println("go");
}
}
启动类 Application
public class Application {
public static void main(String[] args) {
// 类型之间的转换
// 高 低
Person person = new Student();
// 将 person 对象转换成 Student 类型,才可以使用 Student 里面的方法
Student student = (Student) person;
student.go();
// 上面两句可简写成:((Student) obj).go();
// 子类转换成父类,可能丢失自己本来的一些方法!
Student student = new Student();
student.go();
Person person = student;
// 这时的 student 调用 go() 方法需要先转化成 Student 类型才可以
}
}
总结
1、父类引用指向子类的对象;
2、把子类转换成父类,向上转型;
3、把父类转换成子类,向下转型;(强制转换)
4、方便方法的调用,减少重复的代码。