0

私はまだ工場のパターンを最初に読んでいます。PizzaStore の例があり、ピザストア クラスをローカライズして、フランチャイズが独自の地域スタイルを自由に持てるようにしようとしています。

これを行うために、pizzaStore クラスを抽象クラスに変更し、ファクトリ オブジェクトを「abstract createPizza(String type);」に移動しました。方法。大丈夫です、理由がわかりました。

写真を見ると、文章に下線を引いています。その意味 ?「本当に強制したいのなら、メソッドを final にできますか?」

ここに画像の説明を入力

4

6 に答える 6

5

要点は、サブクラスは を実装することになっていますが、 をオーバーライドせ、単に呼び出すようにcreatePizza契約で要求されているということです。このポリシーは、メソッドを final にすることで適用できます。orderPizza

継承用のクラスを設計するときは、通常、クラスを正確に拡張する方法に関連するすべての詳細に注意する必要があります。

于 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

これは、ChicagoStylePizzaStoreorderPizza() のオーバーライドが許可されていないことを意味します。

java final キーワード:final orderPizza()
サブクラスがそのメソッドをオーバーライドできないように強制します。

クラス Chicago は、同じ名前の独自のメソッドからではなく、PizzaStorre() から orderPizza() を呼び出す必要があります。

于 2012-11-26T22:07:35.257 に答える
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 に答える