我所挣扎的一个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原则来帮助我从这个角度更好地了解哪个更好。
答案 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);
}
}