有没有人知道为什么重写过程重写的方法必须抛出重写的方法的同一类型(或子类型)的异常,而另一方面,对于构造函数它的工作方式相反(因此,必须抛出同样的异常或超扔什么的超类型。 非常感谢提前。异常构造函数与异常Java
1
A
回答
4
构造函数没有覆盖他们的父类的构造函数,但他们呼叫超类的构造函数,或隐或显。因此,就像调用其他方法抛出一个Exception
的方法一样,构造函数必须捕获超类的构造函数抛出的异常, st声明它会抛出相同的异常(或该异常的超类)。
另一方面,重写方法必须坚持超类的方法定义。因此,它可以抛出一个更具体的例外,或根本没有。但它不能抛出更广泛的例外,因为这会违反超类的合同。
0
我相信对子类构造函数没有这样的限制。他们可以抛出他们关心的任何类型的异常,与超类构造函数抛出的类型无关。显然,如果他们让超类构造函数通过一个异常,他们将不得不声明它或它的超类型,就像使用其他方法一样。但是,这不是对子类构造函数的具体限制:通过抛出其他类型,您可以轻松地捕获并处理异常。
原因是为什么子类中的构造函数没有“重写”超类中的构造函数,并且没有以方式多态使用。这是一个独立的事物,就像一个名为Subclass.B()
的函数独立于Superclass.A()
。
还有你总是知道当你打电话给new Subclass()
时,你就调用了这个构造函数。而如果你有一个Superclass
的参考,并且打电话给superclass.overriddenMethod()
,你不能确定这个类型是什么。因此,覆盖该方法的任何子类都不能抛出除超类上声明的异常以外的任何其他异常,它们可能会更改方法签名的其余部分。
0
在构造函数中总是会有一个(可能是隐含的)超级调用。 抛出一个超类Exception也会捕获这个。
public B() {
... initialize fields declared with X x = ...;
... call super constructor
... body of constructor
}
一个最重要的方法但是可以更具体,也为例外:降低的可能性。
相关问题
- 1. 构造函数和异常
- 2. 构造函数中的异常,java
- 3. 异常异常构造
- 4. 统一参数构造函数异常
- 5. 处理构造函数的异常
- 6. 构造函数和抛出异常
- 7. ServerSocket的构造函数抛出异常
- 8. 在构造函数中捕获异常
- 9. NullPointerException异常的构造函数定义
- 10. 从构造函数中抛出异常
- 11. PHP从构造函数rethrow异常
- 12. 如何捕获构造函数异常?
- 13. REST异常需要构造函数
- 14. EJB3构造函数抛出异常?
- 15. 构造函数返回值的异常
- 16. Angular2,构造函数DI抛出异常
- 17. 异常处理和构造函数
- 18. RAII和构造函数中的异常
- 19. 从构造函数调用构造函数并捕获异常
- 20. 异常构造类
- 21. 运行析构函数,当构造函数抛出异常
- 22. 通过__init__构造对象并忽略构造函数异常
- 23. C++析构函数异常
- 24. 异常与Java数据结构
- 25. Java自定义异常类的构造函数
- 26. 构造函数处理异常并使用此关键字Java
- 27. Java异常getMessage()方法调用构造函数
- 28. Java:从超级构造函数捕获异常
- 29. 在java中的自定义异常的超类构造函数
- 30. 默认构造函数抛出异常java
这是不正确的。所以这个问题没有意义。子类构造函数不会覆盖其超类构造函数。它称之为。 – 2013-03-08 17:04:29