instanceof
可以判断一个对象是什么类型
package com.oop.demo06;
public class Person {
public void run(){
System.out.println("run");
}
}
package com.oop.demo06;
public class Student extends Person {
public void go(){
System.out.println("go");
}
}
package com.oop.demo06;
public class Teacher extends Person {
}
测试1:
package com.oop;
import com.oop.demo06.Person;
import com.oop.demo06.Student;
import com.oop.demo06.Teacher;
public class Application {
public static void main(String[] args) {
//Object>Person>Student
//Object>Person>Teacher
//Object>String
Object object = new Student();
//System.out.println(X instanceof Y);//能不能编译通过!有父子关系通过
//X指向的实际类型是不是Y的子类型
System.out.println(object instanceof Student);
System.out.println(object instanceof Person);
System.out.println(object instanceof Object);
System.out.println(object instanceof Teacher);
System.out.println(object instanceof String);
System.out.println("=============================");
Person person = new Student();
System.out.println(person instanceof Student);
System.out.println(person instanceof Person);
System.out.println(person instanceof Object);
System.out.println(person instanceof Teacher);
//System.out.println(person instanceof String);//编译报错,两者之间完全没有联系
System.out.println("=============================");
Student student = new Student();
System.out.println(student instanceof Student);
System.out.println(student instanceof Person);
System.out.println(student instanceof Object);
//System.out.println(student instanceof Teacher);//编译报错
//System.out.println(person instanceof String);//编译报错
}
}
输出:
true
true
true
false
false
=============================
true
true
true
false
=============================
true
true
true
测试2:
public class Application {
public static void main(String[] args) {
//类型之间的转换:基本类型转换 父 子
//高 低
Person obj = new Student();
//student.go();不能调用
//student将这个对象转换为Student类型,我们就可以使用Student类型的方法
Student student = (Student)obj;
student.go();//((Student)obj).go();
}
}
输出:go
测试3
public class Application {
public static void main(String[] args) {
//子类转换为父类可能会丢失一些方法
Student student = new Student();
student.go();
Person person = student;
}
笔记:/*
1、父类的引用指向子类的对象,不能反
2、把子类转换为父类,向上转型
3、把父类转换为子类,向下转换,强制转换
4、方便方法的调用,减少重复的代码!简洁
抽象:封装、继承、多态
*/