类可以接受哪个类扩展抽象类?

时间:2012-08-15 06:55:58

标签: java

我有三个班级:

  1. ZookeeperAccess是界面
  2. AbstractZookeeperAccess实现了ZookeeperAccess
  3. 是一个扩展AbstractZookeeperAccess
  4. 的类

    第三课的名字是什么?

    我使用ZookeeperAccessImpl,但我认为这不是最好的名称,它提示只实现ZookeeperAccess,但不会扩展AbstractZookeeperAccess

    ps:ZookeeperAccessImpl是现在唯一扩展AbstractZookeeperAccess的类。

    我使用抽象类来实现接口的一些代码,并为ZookeeperAccessImpl提供一些代码来进行扩展。

    我再次更新问题。感谢

4 个答案:

答案 0 :(得分:2)

你有AbstractZookeeperAccess的事实意味着有多个子类来实现每种类型的ZookeeperAccess,所以在子类名称前加上类型。

例如,给定:

interface ZookeeperAccess
AbstractZookeeperAccess implements ZookeeperAccess

你可能有

FullTimeZookeeperAccess extends AbstractZookeeperAccess
PartTimeZookeeperAccess extends AbstractZookeeperAccess
TemporaryZookeeperAccess extends AbstractZookeeperAccess

答案 1 :(得分:1)

该名称应说明实施的内容。这个实现可以通过扩展一个抽象类,委托给另一个......

来完成

例如,在java.utilLinkedListArrayList实施者List和... AbstractList扩展。

答案 2 :(得分:1)

为什么你认为类名需要暗示它扩展了抽象类?

对于适当的类名,我通常使用前缀来显示每个类的实现特定

例如, EmployeeDao

的界面

抽象类 BaseEmployeeDao

并且实现的名称可能是这样的:

  • PostgresEmployeeDao
  • OracleEmployeeDao
  • MongodbEmployeeDao
  • SerializationEmployeeDao

答案 3 :(得分:1)

类名应清楚地说明类的作用,因此当您需要I - 前缀(对于接口)或Impl - 后缀时,您可能做错了。

接口名称应说明如何使用它(例如Map)。如果一个类的主要目的是实现一个接口,它应该说一些关于实现的特定(例如HashMap)。在这种情况下,所有变量和成员都应该声明为interface-type,并且该类仅用于实例化(除非具体实现很重要,不应该这样)

Impl表明只有一个有意义的实现。如果是这样,为什么你需要一个界面呢? (可能的答案可能是:我想隐藏API用户的实现, Sun Oracle做了很多。)

如果您只想提供默认实施(因为您希望API用户能够提供更有效的解决方案),那么DefaultSimpleDirect - ZookeeperAccess

对于抽象类,我更喜欢使用Base - 后缀(例如ZookeeperAccessBase),它更适合大多数IDE的自动完成。