最终类与将类构造函数设为私有之间的区别到底是什么?
我知道两者都不能被子类化(如果我错了,请纠正我)。他们有什么不同吗?
期末课程无法扩展。它可以防止这种情况
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}
}
扩展类时,默认情况下,构造函数会尝试调用默认(无参数)构造函数。如果是私有的,那么在扩展它时必须显式调用一个非私有的构造函数。如果您没有要调用的非私有构造函数,则将无法对其进行扩展。
感谢您提出的意见。 :-)
问题内容: 我试图了解Java枚举是如何工作的,我得出的结论是,它与将其构造函数声明为private的普通Java类非常相似。 我刚刚得出这个结论,它并不是基于太多的思考,但是我想知道我是否错过了任何事情。 因此,下面是一个简单的Java枚举和一个等效的Java类的实现。 上面和下面的代码在含义上有什么区别? 问题答案: 差异: 枚举扩展并获得其所有不错的功能: 通过正确的序列化自动实现单例行为
问题内容: 为什么将只有私有构造函数的类标记为final是一个好习惯?我的猜测是,要让其他程序员知道它不能被子类化。 问题答案: 将类定为final具有一些(小的)性能提升,因为JIT编译器可以内联该类的功能。我不知道这是否符合“良好做法”的要求,但是我看到了好处。
我正在尝试通过:如果流文件; 在我的主()中,到一个名为“FIFO”的类的构造函数:FIFO(文件); 在FIFO(FIFO.h)的头文件中,我有: 在FIFO.cc,我有: 我一直喜欢(还有更多,我只是粘贴其中一个): 在文件包括从/usr/lib/gcc/x86_64-redhat linux/4.4.7/…/…/…/…/包含/c /4.4.7/bits/localefwd.h: 43,从/u
问题内容: 如果不可变的类对象副本将与原始副本相等,那么为什么Java 中的类具有副本构造函数?这是一个错误还是背后有原因?在Java文档中,指定了: 问题答案: 复制字符串的主要原因是为了 “修剪行李” ,即仅将底层char数组修剪为必需的字符。 基本的char数组可能太大,因为通过调用创建字符串时,char数组可以在新的字符串实例和源字符串实例之间共享;偏移量指向第一个字符,并且包括长度。 我
问题内容: 最近,我经常使用枚举。所以我想知道… 私有Enum构造函数和带有任何可见性修饰符(package-private)的枚举构造函数之间有什么区别吗? 问题答案: 根据java 文档 枚举类型的构造函数必须是程序包私有或私有访问。 但加入了JLS 如果没有为枚举类型的构造函数指定访问修饰符,则该构造函数为私有。 因此,package-private和private之间没有区别。
我有一个java类,它只有静态方法和字段,所以我不想为此创建任何对象。我可以从两个方面来理解, 创建类摘要 使用私有构造函数。 这两种方法哪一种更好?