0

我仍然首先阅读工厂模式。我们有一个 PizzaStore 示例,并试图本地化我们的 PizzaStore 类,以让加盟商自由地拥有自己的区域风格。

为此,我们将 PizzaStore 类更改为抽象类,并将工厂对象移动到“abstract createPizza(String type);” 方法。没关系,我明白为什么了。

如果你看图片,我在句子下划线。这是什么意思 ?“如果我们真的想强制执行,我们可以让方法最终化吗?”

在此处输入图像描述

4

6 回答 6

5

关键是子类应该实现createPizza,但合同要求不要覆盖orderPizza,只需调用它。可以通过将方法设为 final 来强制执行此策略。

当您为继承设计一个类时,您通常必须注意与该类应该如何扩展有关的所有细节。

于 2012-11-26T22:06:56.163 回答
3

如果您使方法最终继承该方法的类不能覆盖它。这确保了 PizzaStore 中的实现被所有子类使用。

来源:http ://docs.oracle.com/javase/tutorial/java/IandI/final.html

于 2012-11-26T22:08:08.457 回答
1

将方法声明为final可防止子类覆盖它。

于 2012-11-26T22:06:08.877 回答
1

如果您将 orderPizza 方法设为final,则不能override在您的子类中,但您仍然可以访问它们。标有 final 的方法不能在您的子类中被覆盖。

于 2012-11-26T22:06:16.820 回答
1

最终方法不能被覆盖,因此任何继承类都具有相同的方法,它们被强制具有相同的方法。

于 2012-11-26T22:06:30.950 回答
1

这意味着ChicagoStylePizzaStore不允许覆盖 orderPizza()。

java final 关键字:final orderPizza()
强制子类不能覆盖该方法。

然后芝加哥类必须从 PizzaStorre() 调用 orderPizza(),而不是从自己的同名方法调用。

于 2012-11-26T22:07:35.257 回答