期末课程无法扩展。它可以防止这种情况
final class FinalClass {
}
// and later
class ExtendedClass extends FinalClass { // ERROR
}
这对于诸如String之类的事情很有用- 您不希望某人能够覆盖String(最常用的对象之一)的逻辑,并且能够(哦,我不知道)添加网络并发送所有返回您使用的字符串。如果可以扩展String,则可以这样做。
class PrivateCons {
private PrivateCons() {
}
}
// later
PrivateCons pc = new PrivateCons(); // ERROR
通常这最终会像这样工作:(java.lang.Math是一个很好的例子)
class FuncLib {
private FuncLib() { } // prevent instantiation
public static void someFunc(...) { }
public static int anotherFunc(...) { }
}
否则最终会像这样// // Integer实际上会这样做
class VerySpecial {
private static Map<String,VerySpecial> cache;
public static VerySpecial generate(String data) {
VerySpecial result = cache.get(data);
if(result == null) {
result = new VerySpecial(data);
cache.put(data,result);
}
return result;
}
private String data;
private VerySpecial() { }
private VerySpecial(String data) { this.data = data}
}
扩展类时,默认情况下,构造函数会尝试调用默认(无参数)构造函数。如果是私有的,那么在扩展它时必须显式调用一个非私有的构造函数。如果您没有要调用的非私有构造函数,则将无法对其进行扩展。感谢您提出的意见。 :-)