这是链接中问题的继续:我正在学习java中的异常处理(基本上是在继承中),子类方法必须抛出异常,该异常是父类方法的子类。
“当子类重写超类中的方法时,子类方法定义只能在父类方法(或重写方法)的throws子句中指定异常类的所有或子集”
这是一条规则。但我不知道制定这条规则的原因是什么,为什么不允许反之亦然。为什么要创建此规则
为了让多态性发挥作用,方法签名需要在预期的地方保持不变,以便它们符合相同的接口。
例如,如果您有一个Car
,它有一个方法Drive()
,它会抛出Unknown nIgnitionException
并且您有一个Ford
,它扩展了
该类,您有时会希望将其视为汽车(而不是特别是Ford
typeCar
),因此您希望方法Drive()
在所有汽车中看起来和行为完全相同。
这意味着如果你想试驾一系列汽车(福特、菲亚特、波奇),你可以
for (Car c : listOfCars) //list contains Fords, Porches, Fiats, etc
{
try {
c.drive(); //All sub-classed Cars contain this exact method
}
catch (UnknownIgnitionException e)
{
//As all subclassed cars are restricted to the same method signature, you can be sure what exceptions all Cars throw
}
}
如果它们都抛出了独立的异常,那么你就不能这么做。
问题内容: 假设我们有这个问题 扩展和覆盖,但鉴于实现现在会引发异常。由于覆盖方法不能引发新的异常,因此不会编译。 最好的解决方案是什么? 将所需的异常传播到。对我来说,这是反对封装,继承和一般OOP的(可能会引发永远不会发生的异常)。 使用呢?此解决方案不会将传播到,但是Oracle文档和其他来源指出,当“客户端代码无法执行任何操作”时,应使用异常类。并非这种情况,此异常将对恢复blablabl
可以从共用基类派生各种异常类。如果 catch 捕获基类类型异常对象的指针或引用,则也可以捕获该基类所派生的异常对象的指针或引用。这样允许相关错误的多态处理。 调试与调试提示 13.2 利用异常继承使异常处理器可以用相当简单的符号捕获相关错误。虽然可以捕获每个派生类异常对象的指针或引用,但更简练的方法是捕获基类异常对象的指针或引用,另外.如果程序员忘记测试一个或几个派生类指针或引用,则捕获每个派生
问题内容: 我在使用Python进行面向对象的编程方面非常陌生,并且在理解函数(新样式类)时遇到困难,特别是在涉及多重继承时。 例如,如果你有类似的东西: 我不明白的是:该类会继承两个构造函数方法吗?如果是,那么哪个将与一起运行,为什么? 而如果要运行另一个呢?我知道这与Python方法解析顺序有关。 问题答案: Guido自己在他的博客文章(包括两次较早的尝试)中对此进行了合理的详细说明。 在你
在我正在编写的程序中,我有以下代码来为单词创建正则表达式并从一系列不同的ArrayList中检索与之匹配的所有单词。 当我从另一个类调用求解(String str)时,行"strArr=str.split (""); 抛出一个空指针异常。我遇到的另一个问题是,当我自己测试这个类时,行if(temp.matches(reg))给出了以下错误。 有人能帮忙吗?
我一直在读关于在处理子类时如何最好地重写equals方法的文章,在这里我发现了不少帖子。他们建议使用instanceof或getClass()实现解决方案的不同方法来比较不同子类的对象。 然而,关于有效的Java,我的理解是(我对这一点还不熟悉,所以我很可能是错的!)布洛赫认为,最终两者都会有问题,“除非你愿意放弃面向对象抽象的好处,否则没有办法在保留equals契约的同时扩展一个可实例化类并添加
假设您有一个第三方库,它公开了下一个接口。 代码无法编译,因为Function不知道如何处理由domap声明的CheckedException。我想出了两个可能的解决方案。 解决方案#1-包装调用 解决方案#2-编写实用程序方法