instanceof关键字
通过分析可以发现向下转型本身是一件存在安全隐患的操作,所以为了保证向下转型的正确性,往往需要在转型之前进行判断,判断某个实例是否为某个类的对象,这个就需要通过instanceof语法来实现。
语法:对象 instanceof 类
该方法将返回一个boolean类型,如果是true表示实例是指定类对象。
范例:观察instanceof的使用
class JavaDemo
{
public static void main(String[] args)
{
Person per =new Person();//不转型
System.out.println(per instanceof Person);//true
System.out.println(per instanceof SuperMan);//false
}
}
class Person
{
public void print(){
System.out.println("一个正常人:吃饭、睡觉");
}
}
class SuperMan extends Person
{
public String fly(){
return "超人可以飞";
}
public String fire(){
return "超人可以喷火";
}
}
范例:向上转型后
class JavaDemo
{
public static void main(String[] args)
{
Person per =new SuperMan();//向上转型
System.out.println(per instanceof Person);//true
System.out.println(per instanceof SuperMan);//true
}
}
class Person
{
public void print(){
System.out.println("一个正常人:吃饭、睡觉");
}
}
class SuperMan extends Person
{
public String fly(){
return "超人可以飞";
}
public String fire(){
return "超人可以喷火";
}
}
在日后开发过程之中,如果要执行对象的向下转型,最好先判断一次。
范例:用instanceof判断是否先有向上转型
class JavaDemo
{
public static void main(String[] args)
{
Person per =new SuperMan();//向上转型
if(per instanceof SuperMan){
SuperMan man = (SuperMan)per;//向下转型
System.out.println(man.fly());
System.out.println(man.fire());
}
}
}
class Person
{
public void print(){
System.out.println("一个正常人:吃饭、睡觉");
}
}
class SuperMan extends Person
{
public String fly(){
return "超人可以飞";
}
public String fire(){
return "超人可以喷火";
}
}
在以后进行一些完善性的程序开发之中,对于转型之前一定要使用instanceof。