Java 不使用任何抽象方法的抽象类的使用

Java 不使用任何抽象方法的抽象类的使用,java,abstract-class,abstract,Java,Abstract Class,Abstract,抽象类不需要包含任何抽象方法 除了不能实例化抽象类之外,还有其他原因使类抽象吗?您可以使类抽象,即使您不想实现该类实现的所有接口方法。 根据java 需要注意的是,实现接口的类必须实现接口的所有方法。但是,如果类被声明为抽象类,则可以定义一个不实现所有接口方法的类 无论如何,您都不能实例化一个用abstract声明的类。可能不行。它将阻止“静态助手”类被实例化,但我认为以这种方式使用它将是一种糟糕的风格 正如其他人所说,如果它打算成为一个基类——其后代声明并实现接口/功能,这对于超类来说太具体了

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

除了不能实例化抽象类之外,还有其他原因使类抽象吗?

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

需要注意的是,实现接口的类必须实现接口的所有方法。但是,如果类被声明为抽象类,则可以定义一个不实现所有接口方法的类


无论如何,您都不能实例化一个用abstract声明的类。

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

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


在这种情况下,它是一种声明,表示super本身没有用处,子类将做更多的事情——它们将专门声明。

抽象类意味着类的定义不完整,因此无法实例化。尽管它没有抽象方法,但它是一个指示器,表明该类可用于继承。即使它对其中的所有方法都有实现,但实现可能仍然不完整,必须被扩展类覆盖。

抽象类的主要作用是提供一个合适的根类,从中可以派生具体的(即非抽象的)子类。这是一个功能强大、用途广泛的特性,可促进代码重用。抽象类封装了一系列数据类型所共有的通用特性,这些特性过于通用,在抽象类中没有意义,但可以在子类中重写

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

抽象类不能被实例化——换句话说,您不能创建抽象类的实例(对象)

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

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


如果抽象类的子类没有覆盖(实现)它继承的所有抽象方法,则该子类本身也是抽象的,必须声明为抽象的,非抽象类中不能有抽象函数

因此,如果出于任何原因需要在类中使用抽象函数,则必须将类声明为抽象的

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

如果抽象类可能不包含任何抽象方法。 除了抽象类不能被实例化之外,还有其他原因使类抽象吗

至于你的问题,我能想到的一种情况如下:

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


我从中摘录了以下几点

  • 抽象类通过阻止开发人员使用抽象类来改善这种情况 从实例化基类开始,因为开发人员已经标记了它 因为缺少功能

  • 它还提供了编译时安全性,这样您就可以确保任何扩展抽象类的类都能提供最低限度的功能来工作,而且您不必担心如何放置存根方法,因为继承者必须神奇地知道,为了使它工作,他们必须重写一个方法


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

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

    密切相关: