Java 为什么我们要创建一个抽象类,即使该类的所有方法都已定义?

Java 为什么我们要创建一个抽象类,即使该类的所有方法都已定义?,java,Java,为什么我们要创建抽象类,即使该类的所有方法都已定义? 如果答案是阻止程序员创建该类的对象,我们不能通过使用私有构造函数来实现同样的目标吗?抽象类的概念是许多其他类的共同基础 想想“动物”。。你不能创造一种叫做“动物”的东西 猫、狗和兔子都是动物 你有一个抽象类叫做“Animal”,然后你有一个类叫做Cat扩展了Animal,或者叫做Dog扩展了Animal。。。但是您不能直接实例化类“Animal”,因为它只是一个公共基础。抽象类的概念是许多其他类的公共基础 想想“动物”。。你不能创造一种叫做“

为什么我们要创建抽象类,即使该类的所有方法都已定义?
如果答案是阻止程序员创建该类的对象,我们不能通过使用私有构造函数来实现同样的目标吗?

抽象类的概念是许多其他类的共同基础

想想“动物”。。你不能创造一种叫做“动物”的东西

猫、狗和兔子都是动物


你有一个抽象类叫做“Animal”,然后你有一个类叫做Cat扩展了Animal,或者叫做Dog扩展了Animal。。。但是您不能直接实例化类“Animal”,因为它只是一个公共基础。

抽象类的概念是许多其他类的公共基础

想想“动物”。。你不能创造一种叫做“动物”的东西

猫、狗和兔子都是动物


你有一个抽象类叫做“Animal”,然后你有一个类叫做Cat扩展了Animal,或者叫做Dog扩展了Animal。。。但是您不能直接实例化类“Animal”,因为它只是一个公共基。

抽象类只会阻止该特定类被实例化。子类仍然允许实例化

没有非私有构造函数的类可以防止子类化和公共实例化


从上面你可以看到这两件事有两个不同的目的。一个类可以有一个属性,甚至两个属性。

一个抽象类只会阻止该特定类被实例化。子类仍然允许实例化

没有非私有构造函数的类可以防止子类化和公共实例化


从上面你可以看到这两件事有两个不同的目的。一个类可以有一个属性,甚至可以有两个属性。

在抽象类中,您可以定义许多类所共有的常量。

在抽象类中,您可以定义许多类所共有的常量。

如果您有一个只包含静态方法的类,您可以抽象它,因为不需要实例化它。我至少可以考虑实用程序或帮助程序类。

如果你有一个只包含静态方法的类,你可以抽象它,因为不需要实例化它。我至少可以考虑实用程序类或助手类。

创建一个类作为
抽象类的设计模式,即使定义了所有方法,也是在抽象类具有“不做任何事情”或方法的异常抛出实现时使用的

我们可以在类中看到这一点,它为每个web方法(
doGet()
doPost()
doPut()
doDelete()
)提供了实现它抛出一个
ServletException
,如果子类想要一个对特定web方法有用的类,则必须重写该类


默认情况下,任何未被工作实现覆盖的web方法都将爆炸。

创建类为
抽象的设计模式,即使定义了所有方法,也是在抽象类具有“不做任何事情”或方法的异常抛出实现时使用的

我们可以在类中看到这一点,它为每个web方法(
doGet()
doPost()
doPut()
doDelete()
)提供了实现它抛出一个
ServletException
,如果子类想要一个对特定web方法有用的类,则必须重写该类


默认情况下,任何未被工作实现覆盖的web方法都会爆炸。

抽象类表明,该类本身不会独立使用,其他一些具体类应该扩展它以使其完全有意义

当阻止使用
私有
时,构造函数将驻留在子类中


没有抽象方法的抽象类可能是开发人员的一个错误。

抽象类表明,这个类本身不会独立使用,其他一些具体类应该扩展它以使其完全有意义

当阻止使用
私有
时,构造函数将驻留在子类中


没有抽象方法的抽象类可能是开发人员的错误。

特别是关于使用抽象与隐藏构造函数的问题:
Abstract
关键字更清楚地说明了程序员的体系结构意图。这是更好的练习


他们提供了所有方法的默认实现这一事实是一个单独的问题。

特别是关于抽象与隐藏构造函数的使用:
abstract
关键字更清楚地说明了程序员的架构意图。这是更好的练习


他们已经提供了所有方法的默认实现这一事实是一个单独的问题。

如果你正在实现所有方法,那么你不需要创建抽象类。你能给我们一个这样做的例子吗?“我们”在这里是一个非常糟糕的概括,因为我没有看到大多数开发人员这样做。根据我的经验,我的大多数同事都避免使用抽象类,除非绝对必要。请不要听上面的人说不要或避免使用抽象类。抽象类有一个位置和目的。。。他们要么从不需要这个目的,要么不理解它的目的。抽象类在被设计成可扩展apon的框架中几乎是一个主要部分。@Worms你是对的,但我认为其他人的观点是,抽象类往往被过度使用和滥用。(我希望他们至少是这么说的。)如果你正在实现所有的方法,那么你不需要创建一个抽象的Cla