你怎么知道什么时候课应该抽象?

时间:2014-07-03 05:56:50

标签: java

我很难选择一个班级应该具体还是抽象。另外,我并不完全知道层次结构中的什么点会使事情变得具体或抽象。问题是,我们如何确定一个类应该是抽象的还是具体的类?

6 个答案:

答案 0 :(得分:2)

通常,当您完全没有理由创建该类的实例时,类应该是抽象的。例如,假设你有一个Shape类,它是Triangle,Square,Circle等的超类。因为" Shape"如此通用,不应该有任何理由构造一个Shape对象,所以它应该是抽象的(或者甚至是一个接口)。

答案 1 :(得分:1)

抽象类意味着抽象不完整。它需要另一个类来完成它和/或它的功能。你需要扩展抽象类。

选择抽象类时,要记住几件事:

  • 您希望永远不要实例化该类。
  • 您希望继承该课程
  • 该类不完整,继承类必须完成其定义(通过重写抽象类的抽象方法)。

答案 2 :(得分:1)

将Abstract类视为普通类,其中一些方法将在稍后定义。

例如,您想要访问数据库,但您不知道将使用哪个数据库。因此,您对打开连接的部分进行编码,启动事务,访问数据库,关闭事务并释放连接。但是,您未实现获取连接的部分,因为该部分是特定于数据库的。因此,例如,访问MySQL的人会扩展您的类,并且只需要实现获取连接的部分。

答案 3 :(得分:0)

当所有子类都有共同的行为时,应该有一个具体的方法。

例如 - 车辆是一个抽象类,然后它由燃料驱动。这将是所有车辆(自行车除外)的常见行为 - 因此应以具体方法描述,其他功能如类(2轮车/ 4轮车),运行细节(里程0-20 / 0-80),动力细节( 100cc-400cc)对于不同的车辆会有所不同,所以它应该抽象方法。

答案 4 :(得分:0)

在我看来,抽象类和具体类之间的唯一区别是抽象类不能“新建”。

您可以在具体类之前放置一个抽象关键字,以阻止其他人更新此类的对象。 (抽象类不必具有抽象方法)

我建议你使用接口而不是抽象类,因为Java是单继承,一个类只能有一个超类但可以实现多个接口。

答案 5 :(得分:0)

抽象类是不错的选择:

  1. 如果您认为您将计划使用继承,因为它为派生类提供了一个公共基类实现
  2. 如果您希望能够宣布非公开会员。
  3. 如果您认为将来需要添加方法
  4. 当你想要一些带有定义的方法时 - 所以抽象类可以有非抽象的方法和实际的实现细节。
  5. 但请记住无法实例化抽象类。它只能用作扩展抽象类的其他类的超类。