• 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
  • 相关阅读:
    .NET2.0基础类库中的范型——FunctionalProgramming
    原则
    080711 30℃
    关于mcp
    080714 33℃
    080715 31℃
    080716 30℃
    11号
    iOS-调用系统的短信和发送邮件功能,实现短信分享邮件分享
    UIView总结
  • 原文地址:https://www.cnblogs.com/woyujiezhen/p/12687646.html
Copyright © 2020-2023  润新知