instanceof有什么用?什么时候用

复习Java基础的时候在理解Java多态这篇博客上看到的(作者在博客园的地址是宜春,他的Java基础系列的文章我个人觉得是写得非常详细的)。

下面直接就是复制作者原文的代码了。

package Demo;

class  Matcher{
    public void eat(){
        System.out.println("想吃烤山猪?");
    }

}

class Boy extends Matcher {
    public void eatKaoYang(){
        System.out.println("妈妈,我想吃烤山猪");
    }
}

class Girl extends Matcher {
    public void eatKaoYang(){
        System.out.println("妈妈,我想吃烤山猪2333");
    }
}

public class Test {
    public static void main(String[] args) {

        Matcher g = new Girl();//向上转型编译通过

        Boy x = (Boy)g;//向下转型

        x.eatKaoYang();//编译通过,但运行报ClassCastException

    }
    
 运行结果:  运行报ClassCastException

}
————————————————
版权声明:本文为CSDN博主「宜春」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_44543508/article/details/102409146

编辑通过:可以简单理解为编写代码时,IDEA没有出现红线报错。

运行时报错:启动main方法测试效果时,IDEA报错XXXException

使用instanceof解决上述问题:

package Demo;

class  Matcher{
    public void eat(){
        System.out.println("想吃烤山药?");
    }

}

class Boy extends Matcher {
    public void eatKaoYang(){
        System.out.println("Boy:妈妈,我想吃烤羊");
    }
}

class Girl extends Matcher {
    public void eatKaoYang(){
        System.out.println("Girl:妈妈,我想吃烤全羊2333");
    }
}

public class Test {
    public static void main(String[] args) {

        Matcher g = new Girl();//向上转型

        if(g instanceof Girl){
            Girl x = (Girl)g;//向下转型
            x.eatKaoYang();  //=====================调用Girl的eatKaoYang()方法
        }else if(g instanceof Boy){ //不执行
            Boy x = (Boy)g;//向下转型
            x.eatKaoYang();  //=====================调用Boy的eatKaoYang()方法
        }
    }
}

运行结果: Girl:妈妈,我想吃烤全羊2333
————————————————
版权声明:本文为CSDN博主「宜春」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_44543508/article/details/102409146

猜你喜欢

转载自www.cnblogs.com/woyujiezhen/p/12687646.html