给定示例的最佳继承模型是什么

时间:2014-07-18 05:48:20

标签: java

主要目标是避免在现有资料上使用最佳继承模型重复字段:

我有以下类层次结构:

class A
{
 private String fieldA1;
 private String fieldA2

 // getters and setters

}

Class B extends A
{
 private String fieldB1;
 private String fieldB2;

 // getters and setters
}

'用户'类将扩展A或B,并具有自己的字段。

假设现有API使用上述数据模型。 现在需要在A类中为新的API集添加新字段。 我有一定的限制,不修改现有的数据模型,因为它使用这些新字段公开或破坏现有的API。因此,需要通过扩展现有数据来创建新的数据模型,以便新API将它们与所有现有字段+新字段一起使用。我有以下解决方案,这可能不是最好的方法,因为它增加了字段的重复。

 class A
    {
     private String fieldA1;
     private String fieldA2

     // getters and setters
    }

    Class B extends A implements Common
    {
     private String fieldB1;
     private String fieldB2;


    // getters and setters
    }


    Class NewA extends A
    {
     private String fieldNewA;

     // getters and setters
    }

   Class NewB extends NewA implements Common
   {
     private String fieldB1;
     private String fieldB2;

     private String fieldNewB;

    // getters and setters

    }

   Interface Common
   {
    //marker interface
   }

请建议是否有更好的方法。

...谢谢

2 个答案:

答案 0 :(得分:3)

我认为您需要退后一步,看看是什么导致您不断向现有类添加新字段。也许你应该只有一个字段,它是属性和值的集合。这样,任何新字段都只是集合中的另一个属性/值。您不必担心经常添加新字段。

答案 1 :(得分:0)

您的示例并不好,例如子类无法访问私有字段,并且不清楚您希望子类实现的目标。

如果您希望继承状态,则您的示例应使用protected或public字段,或显示继承的getter和setter方法。继承状态时,实现Common这样的接口是多余的。更多细节可能有助于澄清您的意图。

除此之外,是的,您可以按照描述扩展数据模型,以便将数据类型添加到现有类中。想要这样做的一个例子可能是希望从Triangle类创建一个Square类,需要添加一个新点。并且还需要改变行为以利用新领域。