/*
instanceof其实是java的一个二元操作符,
和=,<,>这些是类似的,同时它也是被保留的关键字.
主要的作用,是为了测试左边的对象,是不是右边的类的实例,返回的是boolean值。
*/
public class Application {
public static void main(String[] args) {
//Object -> Person -> Teacher
//Object -> String
//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 Student与Teacher同是Person的子类,但两者不相交,像树杈
//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); //编译时就报错,student与Teacher没有半毛钱关系
// System.out.println(X instanceof Y); 编译是否能通过,取决于两者是否有父子关系
}
}
类型转换:
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.go(); 此时会报错 因为Person中没有go方法
//obj这个对象转换为Student类型,我们就可以使用Student类型的方法了!
Student obj1 = (Student) obj; //强制转换 转换时一定要带()
obj1.go();
//如果想用一行代码解释上面的两行代码,也可以这样 ((Student)obj).go();
}
}