java随笔---instanceof

 向下转型操作:将父类转化为某个子类。如:将Object类转为String类,再通俗讲就是将四边形转为平行四边形。通常这样的转型会出错,因为四边形不一定是平行四边形,这时我们通常需要用instanceof先进行判断。


    在程序执行向下转型操作时,如果父类对象不是子类对象的实例,就会发生ClassCastExceptio异常。因此在执行向下转型之前需要养成一个良好的习惯,就是判断父类对象是否为子类对象的实例,通常我们使用instanceof来完成。instanceof的语法格式如下:

  

        myobject instanceof ExampleClass
  

其中,myobject :某类的对象引用  ExampleClass : 某个类


示例:

  

class  Quarangle{
    public void  draw(Quarangle q){
        System.out.println("this is Quarangle");
    }
}

class Square extends  Quarangle{

}

class  Anything{

}

public class instanceofTest {

    public static void main(String[] args) {
        Quarangle quarangle=new Quarangle();
        Quarangle qu=new Square();
        Square sq=new Square();
        if(quarangle instanceof  Square){
            System.out.println("==========");
        }else {
            System.out.println("######");
        }

        if(sq instanceof  Quarangle){
            sq.draw(sq);
        }else {
            System.out.println("----");
        }

        if(qu instanceof  Square){
            System.out.println("*****");
        }else {
            System.out.println("&&&");
        }



//        if(quarangle instanceof  Anything){     //这条语句idea直接编译没通过,eclipse是否能通过可以去尝试一下
//             Anything anything=(Anything) quarangle;
//        }

    }
}

运行结果:

<span style="color:#000000;">######
this is Quarangle
*****
</span>

结果分析:

  条件:Quarangle 是Square的父类

第一组:因为Quarangle 是Square的父类,所以当我们实例化一个Quarangle 时,他有可能是Square类,故在编译上没有问题。但父类不一定是子类的一个实例,子类一定是父类的一个实例,所以输出if 判断为 false 


第二组:子类一定是父类的一个实例,所以 if 判断为true


第三组: 我们实例化的是一个Quarangle对象,但已经明确知道了这个Quarangle是Square类型的,即qu是Square的实例,所以 if 判断为true


第四组: Anything 不是Quarangle的子类,也不是其父类,两者并没有联系,所以 未通过编译。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值