instanceof

instanceof

//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.方便方法的调用,减少重复的代码!简洁
?
        */
?
  }
}

 

instanceof

上一篇:FPGA基础——时序分析之关键路径


下一篇:删除链表中的节点