instanceof和类型转换
instanceof
instanceof比较操作符 (类型转换)引用类型,用于判断对象的类型是否为XX类型或XX类型的子类型
- 格式:对象 instanceof 类名称
- 解释:这将会得到一个boolean值结果,也就是判断前面的对象能不能当作后面类型的实例
父类Person:
public class Person {
public void run(){
System.out.println("run");
}
}
子类Student:
public class Student extends Person {
public void go(){
System.out.println("go");
}
}
子类Teacher:
public class Teacher extends Person{
}
通过Application类查看instanceof的用法:
//Object > String
//Object > Person >Teacher
//Object > Person > Student
Object object = new Student();
//System.out.println(X instanceof Y);//能不能编译通过!取决于X跟Y是否存在父子关系
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);//还没运行就报错,编译报错!person和String是同级的,都是Object底下的
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同级,都在Person底下
//System.out.println(student instanceof String);//编译报错
类型转换
父类:Person
public class Person {
public void run(){
System.out.println("run");
}
}
子类:Student
public class Student extends Person {
public void go(){
System.out.println("go");
}
}
Application类:
public class Application {
public static void main(String[] args){
//类型之间的转换
//父 >>> 子
//高 低
Person p1 = new Student();
//p1将这个对象(Person)转换为Student类型,就可以使用Student类型的方法了!
//Student p2 = (Student) p1;//高转低,强制转换
//p2.go();
((Student)p1).go();//简写
//子 >>> 父 低转高
//子类转换为父类,可能丢失自己本来的一些方法!
Student student = new Student();
student.go();
Person person = student;
}
}
输出:
- 总结:
1.父类引用指向子类的对象
2.把子类转换为父类,向上转型;
3.把父类转换为子类,向下转型;强制转换
4.方便方法的调用,减少重复的代码!简洁
抽象:封装、继承、多态! 更抽象的:抽象类,接口