instanceof实例
package b;
/**
* @version 1.8
* @since 1.0
* @author we'er
*/
public class Test {
public static void main(String[] args) {
// 父子关系
// Object->String
// Object->Person->Teacher
// Object->Person->Student
Object object = new Student();
// System.out.println(X instanceof Y); 判断能不能编译通过,跟最终结果无关
// instance 关键字作用判断左边的引用对象是否是右边的子类型
// 使用instanceof是要先判断是否在同一分支下,否则判断无意义
// instanceof 用于强制类型转换是判断转换对象同比较类是否属于父子关系
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 Teacher错误原因:在 Object->Person->Student分支外
System.out.println(object instanceof String); // false
System.out.println("----------------------------------------");
Person person = 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); // false Teacher错误原因:在 Object->Person->Student分支外
// System.out.println(person instanceof String); // 编译时报错 原因:Person和String想当于同级,无法比较
System.out.println("----------------------------------------");
Student student = new Student();
System.out.println(student instanceof Student); // true
System.out.println(student instanceof Person); // true
System.out.println(student instanceof Object); // true
// System.out.println(student instanceof Teacher); // 编译时报错:不在同一分支,比较无意义
// System.out.println(student instanceof String); // 编译时报错:不在同一分支,比较无意义
}
}
代码测试结果
父类无参方法调用
true
true
true
false
false
----------------------------------------
父类无参方法调用
true
true
true
false
----------------------------------------
父类无参方法调用
true
true
true
类型转换
类型之间转换实质上是父子关系的转换
1. 把父类的引用指向子类的对象
Person person = new Student(); person父类引用指向Student类对象
2. 把子类转换为父类,向上转型。可能会丢失方法
3. 把父类转换为子类,向下转型。(强制转换)
4. 作用:方便方法的调用,减少代码的冗余
public class Test {
public static void main(String[] args) {
Student student = new Student();
student.run();
// 子类转父类,可能会丢失自己本来的一些方法
Person person = student;
// person.run(); 报红,无法使用子类run方法
}
}