instanceof和类型转换
1.instanceof 判断一个对象是什么类型
package com.oop.DemoSix;
public class Teacher extends Person {
}
package com.oop.DemoSix;
public class Student extends Person {
}
package com.oop.DemoSix;
public class Person {
}
Object object = new Student();
System.out.println(object instanceof Student);//true
System.out.println(object instanceof Person);//truc
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);
2.类型转换
(1)父类引用指向子类的对象
(2)子类转换成父类,向上转型,可能会丢失一些自己本来的方法
(3)父类转换成子类,向下转型 强制转换
(4)方便方法的调用,减少重复代码
package com.oop.DemoSix;
public class Person {
public void run(){
System.out.println("Person:run()");
}
}
package com.oop.DemoSix;
public class Student extends Person {
public void eat(){
System.out.println("Student:eat()");
}
}
public class Application {
public static void main(String[] args) {
//父类转换为子类
Person obj = new Student();
obj.run();//Person:run()
Student student = (Student) obj;
student.eat();//Student:eat()
student.run();//Person:run()
//子类转换为父类,可能会丢失自己本来的一些方法
Student stu = new Student();
stu.eat();//Student:eat()
stu.run();//Person:run()
Person person = stu;
((Student) person).eat();//Student:eat()
}
}