伊谢尔伦2017-04-18 10:47:59
最も一般的に使用される場所は、テンプレート メソッド (Template Method) の実装です。
たとえば、リモート サービス用のローカル プロキシのバッチを作成するとします。このエージェントのバッチでは、リクエスト アドレスの取得、リクエストの送信、および対応するコンテンツの取得の手順はすべて共通です。文字エンコーディング タイプの定義と応答コールバックの定義の 2 つの手順のみが異なります。
この時点で、抽象クラスを定義し、リクエストプロセスを完了できます。違いは実際のサブクラスの定義に委ねられます。これは、設計者が抽象クラスのインスタンス化を [許可していない] ということではなく、リモート サービスの特性を知る前に一部の属性を決定できないため、インスタンス化が不可能になっているということです。
JDK の例は java.io.InputStream です。その read(byte[], int, int) メソッドは java.io.InputStream.read() メソッドを呼び出します。 Read() は抽象メソッドであるため、サブクラスで定義する必要があります。ソースコードから学ぶことができます。
リーリー伊谢尔伦2017-04-18 10:47:59
クラスを継承しているか、インターフェースを実装しているかを確認する必要があります
おそらくいくつかの共有メソッドが配置されています
そうでない場合は、インターフェースに変更してみてはいかがでしょうか
迷茫2017-04-18 10:47:59
抽象メソッドのない抽象クラスが特別な意味を持つという意味ではありません。デフォルトの実装を考慮すると、インターフェイスを直接実装するよりもコードが少なくなる可能性があります。一方、抽象クラスに 1 つまたは 2 つの抽象メソッドを保持することを要求することに何の意味があるのでしょうか?
天蓬老师2017-04-18 10:47:59
逆に、このクラスのサブクラスが特定のメソッドを作成するために。もちろん、これはインターフェイスの要件でもありますが、インターフェイスではすべてのメソッドが抽象メソッドである必要があります。ただし、抽象クラスでは、サブクラスによってオーバーライドする必要のないいくつかのメソッドを事前定義できます。
抽象クラスとインターフェイスはすべて抽象化のためのものであり、抽象化の利点については説明しません。たとえば、Equal
インターフェイスまたはクラスを実装する場合は、2 つのメソッド equal
と unequal
を定義します。インターフェイスを使用して実装する場合、クラスはこれら 2 つのメソッドを実装する必要があります。ただし、抽象クラスを使用して実装する場合は、抽象クラスで unequal
を !equal
として実装できるため、unequal を実装する必要があります。 code> のサブクラス > にあります。
Equal
接口或是类,定义两个方法 equal
和 unequal
。如果用接口实现,一个类必须实现这两个方法。可是如果用抽象类实现,可以把unequal
在抽象类里实现为!equal
,这样在其子类里就需要再实现unequal
了。
个人来说更喜欢抽象类一点儿(可是Java
不支持多继承)。比如Compareable
接口其实还有一个要求,如果a<b && b < c
则 a < c
,接口里不能保证这是正确的。当然抽象类也解决不了,但是对于上面的Equal
Java
は多重継承をサポートしていません)。たとえば、Compareable
インターフェイスには実際には a<b && b < c
then a という要件があります。インターフェースで正しいことが保証されています。もちろん、抽象クラスでは問題を解決できませんが、上記の Equal
の場合、抽象クラスは追加の要件をより適切に満たすことができます。 🎜返事0
PHP中文网2017-04-18 10:47:59
例:
ベース: spring mvc
共通のグローバル プロパティ リクエスト レスポンス セッション
共通のメソッド getLoginUser()
もちろん、他にもあります (いくつかの共通のプロパティとメソッド)。
コントローラーがあるのでサービスdaoも利用可能です。
私は通常、いくつかのリセット コードを親クラスに抽出して使用します。