复习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