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

时间:2014-01-09 14:06:59

标签: java

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

7 个答案:

答案 0 :(得分:9)

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

没有非私有构造函数的类会阻止子类化以及公共实例化。

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

答案 1 :(得分:3)

Abstract类的想法是许多其他类的共同基础。

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

你有猫,狗和兔子'是'动物。

你有一个名为“Animal”的抽象类,然后你有一个名为Cat的类,它扩展了Animal,或者扩展了Animal的类......但是你并没有将“Animal”类直接实例化为它唯一的共同基础。

答案 2 :(得分:1)

即使已经定义了所有方法,也会将类创建为abstract的设计模式用于抽象类“无所事事”或抛出异常的方法实现。

我们可以在HttpServlet类中看到这一点,该类包含每种网络方法的实现(doGet()doPost()doPut()和{{1} })抛出一个doDelete(),如果一个子类需要一个对特定Web方法有用的类,那么子类必须覆盖它。

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

答案 3 :(得分:1)

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

虽然阻止使用private构造函数, 继承。

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

答案 4 :(得分:0)

在Abstract类中,您可以定义许多类

共有的常量

答案 5 :(得分:0)

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

答案 6 :(得分:0)

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

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