我们可以通过不同的方式创建一个类,它不能被分类(扩展)?

时间:2016-10-25 15:19:30

标签: java

当然,通过将课程作为决赛,我们无法扩展它。除了这些之外,还有其他方法可以创建一个不可扩展的类吗?

2 个答案:

答案 0 :(得分:2)

在类private中创建所有构造函数(或者如果您只关心另一个包中的子类,则赋予它们默认访问权限),包括private无参数构造函数。尝试从这样的类继承的任何类都不会编译,即使没有尝试创建子类的对象。您仍然可以使用静态getInstance(arguments)类型方法来实例化此类。

但是,防止类被扩展的最明确和最干净的方法是将类声明为final

答案 1 :(得分:1)

以下是方法,我们可以防止类被子类化。

  1. 声明类final,没有其他类可以对它进行子类化。 这是阻止类扩展的最佳方法final关键字用于此目的。

  2. 不要暴露任何非私有的构造函数。如果没有定义构造函数,则定义default constructor并声明它private。请注意,在这种情况下,内部类仍然可以扩展外部封闭类。因此,我们更好地将该类声明为最终类。我们有类String.javaInteger.java等类,这些类不能被子类化,并且这些类被声明为final

  3. 从所有构造函数中抛出运行时异常。这将禁止创建对象。你可以有一个私有构造函数,没有代码抛出异常,创建对象(可能在公共静态方法中)。这不会给出编译时间,但会在尝试创建子类对象时在运行时抛出异常。子类可以从静态方法调用构造函数并将其包装在try catch块中。 Hench这不像上面两个那么干净。

  4. 不变性不仅仅是声明一个类final或将构造函数限制为私有范围。您还需要保护任何可变状态。以上回答仅旨在解决具有不能分类的类的问题。