instanceof
//Object>Person>Student
Object object = new Student();
// System.out.println(X instanceof y);//编译通过需要XY有父子关系
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);
//System.out.println(person instanceof String);编译出错
类型转换
父子对象之间的转换分为了向上转型和向下转型,它们区别如下:
向上转型 : 通过子类对象(小范围)实例化父类对象(大范围),这种属于自动转换
向下转型 : 通过父类对象(大范围)实例化子类对象(小范围),这种属于强制转换
可以根据以下代码体会一下
public class Person {
public void run(){
System.out.println("run");
}
}
public class Student extends Person {
public void go(){
System.out.println("go");
}
}
public class Application {
public static void main(String[] args) {
//类型之间的转换:父类(高) 子类(低)
Person obj = new Student();
//高转低,强制转换
//将obj强制转换为Student类,就可以使用Student类的方法了
((Student) obj).go();
//子类转换为父类,可能会丢失自己本来的一些方法
Student student = new Student();
student.go();
Person person = student;
//person.go();编译出错
}
}