繁体   English   中英

使用没有任何抽象方法的抽象类

[英]Use of an abstract class without any abstract methods

抽象类不需要包含任何抽象方法。

除了抽象类无法实例化这一事实之外,还有其他原因使类抽象化吗?

抽象类意味着类的定义不完整 ,因此无法实例化。 尽管它没有抽象方法,但它表明该类可用于继承 尽管它具有其中所有方法的实现,但实现可能仍然不完整,并且必须由扩展类覆盖。

即使您不想实现该类实现的所有接口方法,也可以将类设为抽象类。 根据java 文档

有人指出,实现接口的类必须实现所有接口的方法。 但是,如果声明该类是抽象的,则可以定义一个不实现所有接口方法的类。

无论如何你都无法实例化一个用abstract声明的类。

可能不是。 它会阻止“静态助手”类被实例化,但我认为使用它会是一种糟糕的风格。

正如其他人所说,如果它打算成为一个基类 - 后代声明和实现接口/功能,这对超类来说太具体了 - 那么abstract可能适合超类。

在这种情况下,它是一个声明,超级对它自己没用,并且子类将做更多的事情 - 他们将特别声明。

抽象类的主要作用是提供一个适当的根类,从中可以派生出具体的(即非抽象的)子类。 这是一个功能强大且功能多样的功能,可以促进代码重用。 抽象类封装了一系列数据类型通用的一般特性 - 这些特性在抽象类中过于笼统而无意义,但可以在子类中重写

任何具有抽象方法的类本身都是自动抽象的,并且必须使用关键字abstract定义自己 - 有趣的是,抽象类不需要包含任何抽象方法

抽象类无法实例化 - 换句话说,您无法创建抽象类的实例(对象)

即使抽象类的对象无法实例化,也可以声明对抽象类对象的引用,例如Account a; 不会生成语法错误

如果抽象类的子类重写,即在其超类中提供每个抽象方法的实现,则子类称为具体类,并且可以创建子类的对象

如果抽象类的子类没有覆盖(实现)它继承的所有抽象方法,那么该子类本身也是抽象的,必须声明为

非抽象类中不能有抽象函数!

因此,如果您因为某种原因需要在类中使用抽象函数,则必须将您的类声明为抽象类。

为什么我需要一个抽象函数?

使用抽象方法有什么意义?

如果抽象类可能不包含任何抽象方法。 除了抽象类之外,没有任何其他理由使类抽象无法实例化

至于你的问题,我能想到的情况如下 -

让我们说你需要的只是一个类的静态功能。 静态变量和函数。 所以基本上你不希望用户创建你的类的任何实例。 现在你可以将你的构造函数设为私有,从而排除创建它的实例的可能性,但你也不想这样做。 为什么要写额外的代码行? 在这种情况下,您可以使您的类抽象化。

我从下面提取了以下几点我为什么要将一个类声明为一个抽象类?

  1. 抽象类通过阻止开发人员实例化基类来改善这种情况,因为开发人员已将其标记为缺少功能。

  2. 它还提供编译时安全性,以便您可以确保扩展抽象类的任何类提供最低限度的工作功能,并且您不必担心将继承者以某种方式必须神奇地知道它们具有的存根方法覆盖方法以使其工作。

抽象类充当其子类的模板。 例如,抽象类Tree和子类Banyan_Tree具有树的所有特征以及特定于banyan树的特征。

理解抽象类和接口之间的差异至关重要。 接口只有方法声明或抽象方法和常量数据成员,而抽象类可能有抽象方法,成员变量和具体方法。 因为Java仅支持单继承,所以类可以实现多个接口,但只能扩展一个抽象类。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM