为什么我们创建抽象类,即使已经定义了该类的所有方法? 如果答案是阻止程序员创建该类的对象,那么我们不能通过使用私有构造函数来实现相同的目的吗?
答案 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
关键字更清楚地说明了程序员的架构意图。这是更好的做法。
他们提供了所有方法的默认实现这一事实是一个单独的问题。