instanceof
- 什么是 instanceof
是 Java 的保留关键字。它的作用是测式一个对象是否为一个类(或接口、抽象类、父类)的实例返回 boolean 的数据类型
- instanceof的特点
左边是对象,右边是类;当左边对象是右边类或子类所创建对象时,返回true;否则,返回false
- instanceof用法实例
//父类
public class Person {
}
//student子类
public class Student extends Person {
}
//teacher子类
public class Teacher extends Person {
}
//测试类
public class Test {
public static void main(String[] args) {
//Object > Person > Student
//Object > Person > Teacher
//Object > int
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 int);//编译时就报错
//===========================================================
Person person =new Student();
System.out.println(person instanceof Student);//返回true,Studen类是person对象的指向
System.out.println(person instanceof Person);//返回true,Person类是person对象的实例
System.out.println(person instanceof Object);//返回true ,Object类是person对象指向类的父类
System.out.println(person instanceof Teacher);//返回false
System.out.println(person instanceof int);//编译时就报错
//这么看下来就发现,instanceof只要是右边的类是左边对象的指向,实例,父类就会返回true,如果没有什么联系就会返回false
}
}
类型转换
- 类型转换
低类型转换为高类型可以直接转换,而高类型转换为低类型需要进行强制转换,为了方便方法的调用,减少重复的代码
- 类型转换实例
- 当我们使用父类的引用指向子类对象时( Person obj =new Student();),想用父类的对象去调用子类独有的方法时发现不能直接进行调用(obj.talk(),直接这样是不行的),我们需要将父类的对象强制转化为子类的对象(((Student)obj).talk();)才能去调用子类独有的方法
- 当我们像将子类的对象转换为父类的对象时,再去调用子类的一些方法发现不能直接调用,所以说当子类转换为父类的时候可能会丢失一些自己的方法。
- //把子类转换为父类 向上转型 //把父类转换为子类 向下转型
父类与子类类型之间进行转换
//父类
public class Person {
public void say(){
System.out.println("a");
}
}
//student子类
public class Student extends Person {
//子类独有的方法
public void talk(){
System.out.println("b");
}
//测试类
public class Test {
public static void main(String[] args) {
//高 //低
//把子类转换为父类 向上转型
Person obj =new Student();
//我们不能直接使用obj去调用子类的talk方法,这是子类独有的
//当时我们可以通过强制转换将person引用类型的obj强制转换为
//低类型student的obj
//把父类转换为子类 向下转型
((Student)obj).talk();
Student student = new Student();
student.talk();
//将Student类的对象sthdent转换为Person类的对象person
Person person = student;
//我们发现不能用person.talk();去调用talk方法了
//所以说当子类转换为父类的时候可能会丢失一些自己的方法。
}
}