当前位置: 首页 > 面试题库 >

将类作为最终类和将类构造函数作为私有之间有什么区别

宗政德宇
2023-03-14
问题内容

最终类与将类构造函数设为私有之间的区别到底是什么?

我知道两者都不能被子类化(如果我错了,请纠正我)。他们有什么不同吗?


问题答案:

期末课程无法扩展。它可以防止这种情况

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类,它只有静态方法和字段,所以我不想为此创建任何对象。我可以从两个方面来理解, 创建类摘要 使用私有构造函数。 这两种方法哪一种更好?