Java 如何知道类何时应该是抽象的?
我很难选择一个类是具体的还是抽象的。另外,我不知道在层次结构中什么时候事情变得具体或抽象。我的问题是,我们如何确定一个类应该是抽象的还是具体的类 当所有子类都有一个共同的行为时,应该有一个具体的方法Java 如何知道类何时应该是抽象的?,java,Java,我很难选择一个类是具体的还是抽象的。另外,我不知道在层次结构中什么时候事情变得具体或抽象。我的问题是,我们如何确定一个类应该是抽象的还是具体的类 当所有子类都有一个共同的行为时,应该有一个具体的方法 例如,车辆是一个抽象类,那么它是由燃料驱动的。这将是所有车辆(自行车除外)的常见行为,因此应采用具体方法进行描述,其他功能,如等级(2轮/4轮)、行驶细节(里程0-20/0-80)、动力细节(100cc-400cc)将因车辆而异,因此应采用抽象方法。一般而言,当您完全没有理由创建某个类的实例时,该类
例如,车辆是一个抽象类,那么它是由燃料驱动的。这将是所有车辆(自行车除外)的常见行为,因此应采用具体方法进行描述,其他功能,如等级(2轮/4轮)、行驶细节(里程0-20/0-80)、动力细节(100cc-400cc)将因车辆而异,因此应采用抽象方法。一般而言,当您完全没有理由创建某个类的实例时,该类应该是抽象的。例如,假设您有一个Shape类,它是三角形、正方形、圆形等的超类。由于“Shape”非常通用,因此不应该有任何理由构造Shape对象,因此它应该是抽象的(或者甚至是一个接口)。抽象类的意思是它是抽象的,而不是完整的。它需要另一个类来完成它和/或它的功能。您需要扩展抽象类 选择抽象类时,需要记住的几件事:
- 您希望永远不要实例化该类
- 您希望继承该类
- 该类不完整,继承类必须完成其定义(通过重写抽象类的抽象方法)李>
例如,您希望访问数据库,但不知道将使用哪个数据库。因此,您需要对打开连接、启动事务、访问数据库、关闭事务和释放连接的部分进行编码。但是您没有实现获取连接的部分,因为该部分是特定于数据库的。因此,例如,访问MySQL的人会扩展您的类,并且只需要实现获取连接的部分。在我看来,抽象类和具体类之间的唯一区别是抽象类不能“新建” 您可以将抽象关键字放在具体类之前,以阻止其他人新建该类的对象。 (抽象类不必具有抽象方法)
我建议您使用接口而不是抽象类,因为Java是单继承,一个类只能有一个超类,但可以实现多个接口。一个抽象类是不错的选择:
如果你能提供一个,如果你想得到一般性的答案,那就好了。同意你的例子,为它使用接口不是更好的选择吗?不,因为接口将无法保存示例的样板代码。所以可以肯定地说,抽象类是我们感官无法感知的类?就像形状一样,它只是作为一个概念而不是一个实际的物体存在。这听起来很安全。尽管,例如,您可能有一个抽象类“Car”,其中包含具体的子类,如“Truck”或“Jeep”