zoukankan      html  css  js  c++  java
  • 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
  • 相关阅读:
    How To Build CyanogenMod Android for smartphone
    CentOS安装Code::Blocks
    How to Dual boot Multiple ROMs on Your Android SmartPhone (Upto Five Roms)?
    Audacious——Linux音乐播放器
    How to Dual Boot Multiple ROMs on Your Android Phone
    Everything You Need to Know About Rooting Your Android Phone
    How to Flash a ROM to Your Android Phone
    什么是NANDroid,如何加载NANDroid备份?
    Have you considered compiled a batman-adv.ko for android?
    BATMAN—Better Approach To Mobile Adhoc Networking (B.A.T.M.A.N.)
  • 原文地址:https://www.cnblogs.com/woyujiezhen/p/12687646.html
Copyright © 2011-2022 走看看