小编JCl*_*sic的帖子

约定是否接受非静态最终变量?

这个问题讨论了非静态最终变量的实践。

我的问题(由于我很忙,我将使其变得快速)是在变量上使用final修饰符后,没有什么可以更改它,对吗?

所以可以说我在一个名为animal的类中有一个静态最终Integer,值10。

public static final int SIZE = 10;
Run Code Online (Sandbox Code Playgroud)

这意味着所有从animal类型创建的对象的SIZE = 10。

什么时候使用非静态的但最终的变量有用,实用或被接受:

public final int SIZE = 10;
Run Code Online (Sandbox Code Playgroud)

这也意味着所有从animal类型创建的对象的大小都将为SIZE = 10。

那么后者在什么情况下有用?因为它基本上意味着同一件事。

java

2
推荐指数
2
解决办法
1711
查看次数

抽象方法中的多态性和检查异常抛出

假设我们有一个Foo包含一个方法的类,该方法可能会抛出IOException.

public abstract class Foo {
    public abstract void foo() throws IOException;
}
Run Code Online (Sandbox Code Playgroud)

但是,当我FooImpl像这样扩展该类时:

public class FooImpl extends Foo {
    public void foo() throws Exception {
        throw new Exception("This cannot throw!");
    }
}
Run Code Online (Sandbox Code Playgroud)

这会导致编译时错误:“覆盖的方法不会抛出 java.lang.Exception”

我理解这是因为覆盖方法“可能只抛出其父方法的已检查异常,以及任何未检查的异常”

为什么会这样呢?为什么我们要禁止自己抛出更广泛的异常?

(我也在寻找解决方法)

谢谢!

java polymorphism

0
推荐指数
1
解决办法
312
查看次数

标签 统计

java ×2

polymorphism ×1