抽象类保持成员字段或使用具体实现的Getter()?

时间:2016-05-07 17:06:54

标签: java oop variables abstract member

我所挣扎的一个OOP原则是抽象类及其保存成员字段(变量)的能力。

以下面的代码为例(示例1 ):

public abstract class AbstractClassConstructor {

    List mList;

    public AbstractClassConstructor(List list) {
        mList = list;
    }

    public Object getListRow(int row) {
        return mList.get(row);
    }
}

请检查提供相同功能的替代代码(示例2 ):

public abstract class AbstractClassGetter {

    public abstract List getList();

    public Object getListRow(int row) {
        return getList().get(row);
    }
}

我关注示例1 示例2 是否更易于维护,我希望尽可能遵循OOP标准。< / p>

目前我看到示例1中的耦合比我的示例2更多,尽管我没有看到很多其他问题。然而,示例2更直接,我喜欢具体实现保存私有字段,AbstractClassGetter使用方法来获取它。这感觉更好,但是我努力运用正确的OOP原则来帮助我从这个角度更好地了解哪个更好。

1 个答案:

答案 0 :(得分:1)

对于我来说,如果mList将在具有mList特定于其类型的函数的子类中使用,那么示例1 将不理想(例如LinkedList或ArrayList)。这是因为在使用之前可能需要将其强制转换为实际类型。在这种情况下,示例2 会更好。

如果子类中没有特定类型的函数,那么示例1 在封装方面会更好。

<强>更新

另一种可能被认为是中间立场的方法是使用Generic。

public abstract class AbstractClassConstructor<T extends List> {

    T mList;

    public AbstractClassConstructor(T list) {
        mList = list;
    }

    public Object getListRow(int row) {
        return mList.get(row);
    }
}