instanceof关键字主要解决的是多态类型转换中向下转型的报错问题
对象的类型转换
概念:对象的类型转换指的是可以将一个对象的类型转换成继承结构中的另一个类型。分为两种情况:向上转型和向下转型.
现在我们假设legoCity是父类Lego的一个子类。
class Lego{
public void Greet(){
String name="Lego";
System.out.println("你想买乐高吗?");
}
}
class legoCity extends Lego{
String name="legoCity";
@Override
public void Greet(){
System.out.println("你想买乐高城市组吗?");
}
}
class legoCityPolicestation extends legoCity{
String name="legoCityPolicestation";
@Override
public void Greet(){
System.out.println("你想买乐高城市组警察局吗?");
}
}
- 向上转型(隐式转换):是从子类到父类的转换
Lego l=new legoCity();
legoCity lc=l;
- 向下转型(显示转换):是从父类到子类的转换
Lego l=new legoCity();
legoCityPolicestation lc=(legoCity)l;
但是这样会发生报错(报错原因略微有点绕此处不阐述)。
instanceof关键字的引入
针对这种情况,java提供了instanceof关键字,用于判断一个对象是否是一个类或者接口的实例,表达式返回值为boolean类型。
格式:
变量名 instanceof 类名
修改后的代码如下:
Lego l=new legoCityPolicestation();
if(l instanceof legoCity){
legoCity lc=(legoCity)l;
代码1;
}
else if(l instanceof legoCityPolicestation){
legoCityPolicestation lc=(legoCityPolicestation)l;
代码2;
}
如果这个实例是legoCity类型,那么就会执行代码1;如果是legoCityPolicestation类型,那么就会执行代码2。