//Object > String
//Object > Person > teacher
//Object > Person > Student
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
?
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
//System.out.println(person instanceof 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); //编译报错
?
//System.out.println(x instanceof y);
// 能不能编译通过,就看x与y是否存在父子关系; 是否为true,看x真相的编译类型是否是Y的子类型
package com.zishi.oop.demo06;
?
public class Application {
public static void main(String[] args) {
//类型之间的转换:父 子
//高 //低
Person obj = new Student();
//obj.go(); 无法使用子类里的方法
?
//student将这个对象转换为Student类型,我们就可以使用Student类型的方法
?
Student student = (Student)obj;
student.go();
//也可以写成: ((Student)obj).go();
?
//子类转换为父类,可能丢失自己本来的一些方法!
Student student1 = new Student();
student1.go();
Person person = student1;
//person.go(); 无法直接调用自己原来的方法
?
/*
1.父类引用指向子类的对象
2.把子类转换为父类,向上转型;
3.把父类转换为子类,向下转型;强制转换
4.方便方法的调用,减少重复的代码!简洁
?
*/
?
}
}