我有三个组成部分:
>界面:类别
>父类:MainCategory
>子类:子类别
我知道:
> MainCategory IS-A类别
> MainCategory Has-A SubCategory
>子类别IS-A类别
但是,当我尝试使用extends和implements在我的代码中构造它们时,我有点困惑.以下是我到目前为止的情况,请告诉我这是否有意义或是否应以其他方式完成?谢谢.
public interface Category{}
public class MainCategory implements Category{}
public class SubCategory extends MainCategory implements Category {}
我想知道我是否正确地思考它.此外,每个MainCategory将包含多个子类别,因此使用扩展是正确的还是不意味着聚合?谢谢.
解决方法:
根据你提到的内容:
> MainCategory IS-A类别
> MainCategory Has-A SubCategory
>子类别IS-A类别
SubCategory不应继承MainCategory.它应该只是实现Category接口.如果SubCategory和MainCategory之间有很多共同的代码,我怀疑你会这样,那么我可以建议另一种布局:
class Category {
private List<SubCategory> children = new ArrayList<SubCategory>();
public List<SubCategory> getSubCategories() {
return children;
}
public void addSubCategory(SubCategory child) {
child.setParent(this);
children.add(child);
}
public Category getParent() {
return null;
}
}
class SubCategory extends Category {
private Category parent = null;
public Category getParent() {
return parent;
}
public void setParent(Category parent) {
this.parent = parent;
}
}
任何类别都可能有SubCategory,但只有SubCategory可以有父类.请注意,Category不是抽象类.我的想法是可以直接实例化类别.它将是您的SubCategory类中的大多数逻辑的根类别和基础. SubCategory可以覆盖特定于SubCategory的任何行为.如果你发现你必须在SubCategory中重载很多行为,那么将Category作为一个抽象类并改为创建一个MainCategory,但我怀疑这不是你的情况.
希望有所帮助!