【发布时间】:2020-03-24 07:12:04
【问题描述】:
我正在研究 java 中 final 类的概念,它说 final 类不能在 java 中被继承。但是,如果我们可以将class的所有方法都设为final,所有变量都设为private,是不是和将class声明为final的效果一样?
假设以下场景:
让我再描述一下我的问题,使类不可变的关键要求之一是 - Class 应该被声明为 final。所有变量都应该是最终的(并通过构造函数初始化)
我们是否可以通过将类的所有方法设置为 final 并将所有变量声明为 private 和 final 来实现这种不变性要求,以实现这种不变性条件?
所以,即使类现在可以被继承,我们也不能重写方法(因为方法是最终的)并且我们不能更改超类的变量(因为它们是最终的并且也不可见 - 私有) .
【问题讨论】:
-
没有。您可以将所有变量和方法都声明为 final 的类,这不会阻止您对它进行子类化。
-
这不会阻止您创建一个继承自该类并添加新方法的类
-
是的,它不会阻止子类化,但是该子类是否能够以任何方式影响超类,如果超类被声明为 final,这是不可能的?我在这里谈论的是影响,而不是我们能否继承。
标签: java inheritance final access-modifiers