java – 为什么在这段代码中有未处理的异常?
发布时间:2020-12-15 05:12:26 所属栏目:Java 来源:网络整理
导读:我来自以下代码: class Animal{ public void eat() throws Exception {}}class Dog extends Animal{ public void eat(){} //no exception thrown public static void main(String[] args){ Animal a = new Dog(); Dog d = new Dog(); d.eat(); //ok a.eat()
我来自以下代码:
class Animal{ public void eat() throws Exception {} } class Dog extends Animal{ public void eat(){} //no exception thrown public static void main(String[] args){ Animal a = new Dog(); Dog d = new Dog(); d.eat(); //ok a.eat(); //does not compile!..(1) } } 这里,(1)即使在运行时也不会编译Dog的eat()方法将被调用.为什么会这样? Java支持这个的原因是什么?这不应该是一个bug吗? 解决方法
因为您使用Animal引用来引用Dog. Animal.eat的签名包括Exception.编译器知道Dog是一种Animal,但是一旦你使用Animal引用它就不知道它是一个Dog直到运行时.
换句话说,所有的狗都是动物,但不是所有的动物都是狗. 编辑 你可以添加一个演员 ((Dog) a).eat(); //would compile 在运行时,如果a实际上不是Dog,那将失败. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- java – 在Heroku上运行Dropwizard应用程序:R10无法绑定到
- java – 如何检查BigDecimal是否在一个集合或映射中以一个比
- java – 如何将参数传递给Rest-Assured
- 为什么我收到java.lang.AbstractMethodError错误?
- Java中的break和continue关键字的使用方法总结
- java.lang.IllegalArgumentException:观察者为null
- 浅谈spring ioc的注入方式及注入不同的数据类型
- java – 在OGNL中使用Spring EL的好处?
- java – 如何创建具有多个视图的ListView
- 基于Elasticsearch5.4的常见问题总结