我仍然首先阅读工厂模式。我们有一个 PizzaStore 示例,并试图本地化我们的 PizzaStore 类,以让加盟商自由地拥有自己的区域风格。
为此,我们将 PizzaStore 类更改为抽象类,并将工厂对象移动到“abstract createPizza(String type);” 方法。没关系,我明白为什么了。
如果你看图片,我在句子下划线。这是什么意思 ?“如果我们真的想强制执行,我们可以让方法最终化吗?”
我仍然首先阅读工厂模式。我们有一个 PizzaStore 示例,并试图本地化我们的 PizzaStore 类,以让加盟商自由地拥有自己的区域风格。
为此,我们将 PizzaStore 类更改为抽象类,并将工厂对象移动到“abstract createPizza(String type);” 方法。没关系,我明白为什么了。
如果你看图片,我在句子下划线。这是什么意思 ?“如果我们真的想强制执行,我们可以让方法最终化吗?”
关键是子类应该实现createPizza
,但合同要求不要覆盖orderPizza
,只需调用它。可以通过将方法设为 final 来强制执行此策略。
当您为继承设计一个类时,您通常必须注意与该类应该如何扩展有关的所有细节。
如果您使方法最终继承该方法的类不能覆盖它。这确保了 PizzaStore 中的实现被所有子类使用。
来源:http ://docs.oracle.com/javase/tutorial/java/IandI/final.html
将方法声明为final
可防止子类覆盖它。
如果您将 orderPizza 方法设为final,则不能override
在您的子类中,但您仍然可以访问它们。标有 final 的方法不能在您的子类中被覆盖。
最终方法不能被覆盖,因此任何继承类都具有相同的方法,它们被强制具有相同的方法。
这意味着ChicagoStylePizzaStore
不允许覆盖 orderPizza()。
java final 关键字:final orderPizza()
强制子类不能覆盖该方法。
然后芝加哥类必须从 PizzaStorre() 调用 orderPizza(),而不是从自己的同名方法调用。