Java 以防止实例化为主要目标使类抽象的副作用?

Java 以防止实例化为主要目标使类抽象的副作用?,java,abstract-class,private,encapsulation,Java,Abstract Class,Private,Encapsulation,我知道方法是让构造函数私有化, 但是我们为什么要把这个方法抽象化呢?我的问题是,它有什么副作用?免责声明:这个问题被严重修改了,因此我认为我的答案不再能真正回答这个问题。遗憾的是,我无法回答这个新问题,因为在评论的进一步讨论中,很明显,似乎存在一些困惑 将默认构造函数设置为私有将使其成为私有,以便其他类无法创建此类的对象。因为他们将如何访问构造函数?他们不能。但这并不意味着不能创建此类的对象。与通过getter或setter函数访问私有变量的方法相同,您仍然可以创建此类的实例。您只需在类本身内

我知道方法是让构造函数私有化, 但是我们为什么要把这个方法抽象化呢?我的问题是,它有什么副作用?

免责声明:这个问题被严重修改了,因此我认为我的答案不再能真正回答这个问题。遗憾的是,我无法回答这个新问题,因为在评论的进一步讨论中,很明显,似乎存在一些困惑


将默认构造函数设置为私有将使其成为私有,以便其他类无法创建此类的对象。因为他们将如何访问构造函数?他们不能。但这并不意味着不能创建此类的对象。与通过getter或setter函数访问私有变量的方法相同,您仍然可以创建此类的实例。您只需在类本身内部执行,然后将它们分发到外部

单例设计模式就是一个例子。在这里,您可以生成一个实例,通过getter函数可以访问该实例



另一方面,抽象类根本不能用于创建对象。它们是用来保存公共数据结构和函数的模板。您可以通过抽象函数强制实现函数。

我见过使用抽象类的用法,它们定义静态工厂方法,创建该类的默认实例,该类可以是该抽象类的公共子类,也可以是该抽象类的私有子类。我想到的一个快速示例是
java.awt.print.PrinterJob

我多次将上述示例用作工厂,并将其作为一种隐藏具体实现的方法,以避免客户机代码直接创建具体实现


上面这个例子的另一个原因是为了证明类不是直接创建的,而是通过它的静态工厂方法创建的。

什么的影响,使类构造函数私有还是将类标记为抽象?将其标记为抽象“我知道方法是使构造函数私有”它真的不是。。。“使方法抽象有什么副作用?”它破坏了类的具体性,并强制要求必须实现该方法才能使派生类型具体化。为什么?Java是一种面向对象的编程语言,那么让一个类不是永不满足的目的是什么呢?你确定你的编程风格使用了正确的语言吗?没有副作用,它破坏了具体性,就是这样。而且您的测试是错误的(简单地说,将c'tor设置为私有并不能保证类不会被实例化),如果类具有公共静态方法,您可以仅使用私有c'tor实例化一个类。这两种方法的不同之处在于,一种方法要求您继承类以获得具体类型,另一种方法可用于具体类型,但不允许继承。我不希望实例化该类,但希望使该类可继承,并且构造函数应可访问,如何做this@ShashiTunga为什么你如此反对让一个类
抽象化
?我觉得抽象不是做这件事的方法。@ShashiTunga为什么?
抽象类是可派生的,不能实例化,但可以有一个可访问的c'tor。有什么你没有提到的,因为现在
抽象
听起来正是你需要的(从你对你需要的描述中)。你一定对术语感到困惑。你知道“实例化”意味着“创建一个类的对象”吗?你在问(与主要问题完全不同的是,顺便说一句)是否可以创建一个不允许以任何方式使用构造函数的类,但同时希望构造函数可用。