使用抽象方法有什么意义?
使用“抽象方法”有什么意义?抽象类不能实例化,但是抽象方法呢?他们只是在这里说“您必须实现我”,如果我们忘记了它们,编译器会抛出错误?
这还意味着其他吗?我还阅读了有关“我们不必重写相同的代码”的内容,但是在抽象类中,我们仅“声明”了抽象方法,因此我们将不得不在子类中重写代码。
您能帮我多了解一点吗?我检查了有关“抽象类/方法”的其他主题,但没有找到答案。
回答:
除了提醒您必须实现它之外,最大的好处是,任何按其抽象类类型(包括this
抽象类本身)引用对象的人都可以使用该方法。
例如,假设我们有一个类负责获取状态并以某种方式对其进行操作。抽象类将负责获取输入,将其转换为long
(例如)并以某种方式将该值与先前的值组合在一起-“某种方式”是抽象方法。抽象类可能类似于:
public abstract class StateAccumulator { protected abstract long accumulate(long oldState, long newState);
public handleInput(SomeInputObject input) {
long inputLong = input.getLong();
state = accumulate(state, inputLong);
}
private long state = SOME_INITIAL_STATE;
}
现在,您可以定义一个累加累加器:
public class AdditionAccumulator extends StateAccumulator { @Override
protected long accumulate(long oldState, long newState) {
return oldState + newState;
}
}
没有这种抽象方法,基类将无法说“以某种方式处理此状态”。但是,我们不想在基类中提供默认实现,因为这没有多大意义-
您如何为“其他人可以实现此目标”定义默认实现?
请注意,有多种方法可以给猫皮化。该策略模式将涉及声明声明的接口accumulate
模式,并通过该接口的实例到不再视为抽象基类。用术语来说,这是使用合成而不是继承(您已经从两个对象(一个聚合器和一个加法器)中组成了一个加法聚合器。
以上是 使用抽象方法有什么意义? 的全部内容, 来源链接: utcz.com/qa/421384.html