上个周末我读了一些关于接口、抽象类和设计原则的内容。最后我有点困惑,于是尝试根据所学(或者我以为我学到的)建立一个例子。
这是我的例子:模拟一个保存关于树的信息的类。
首先,我会创建一个接口:
public interface Tree{
public void grow();
}
接口包含应由具体树实现的所有方法。到目前为止一切顺利,但这样的树需要一些在所有树系列中共享的属性(变量)。为此,我将使用抽象类:
public abstract class AbstractTree implements Tree {
private String barColor;
private int maxHeight;
private boolean isEvergreen;
}
这是正确的方式吗?还是我不能够创建一种关于应该在其他类中的属性(变量)的合同?
当属性部分完成之后,我想要有3种类型的树。
- 橡树
- 枫树
- 云杉
因此,每个树“类型”都可以具有单独的变量。
public class OakTreeImpl extends AbstractTree{
private String barColor;
private int maxHeight;
private boolean isEvergreen;
private String foo;
@Override
public void grow() {
}
}
这种方法在面向对象设计原则方面是否正确,还是我完全错了?
protected
字段,这样你就不需要在实现中重新声明它们。 - OneCricketeerpublic int getMaxHeight(){return this.maxHeight;}
您仍然可以在实现中稍后重写它们,但这并不是强制性的。如果您想强制重写,则在抽象类中声明它们为public abstract int getMaxHeight();
- Draken