検索

ホームページ  >  に質問  >  本文

java中没有抽象方法的抽象类有什么意义?仅仅是为了让别人不能创建该类的对象?

怪我咯怪我咯2803日前758

全員に返信(6)返信します

  • 伊谢尔伦

    伊谢尔伦2017-04-18 10:47:59

    最も一般的に使用される場所は、テンプレート メソッド (Template Method) の実装です。
    たとえば、リモート サービス用のローカル プロキシのバッチを作成するとします。このエージェントのバッチでは、リクエスト アドレスの取得、リクエストの送信、および対応するコンテンツの取得の手順はすべて共通です。文字エンコーディング タイプの定義と応答コールバックの定義の 2 つの手順のみが異なります。

    この時点で、抽象クラスを定義し、リクエストプロセスを完了できます。違いは実際のサブクラスの定義に委ねられます。これは、設計者が抽象クラスのインスタンス化を [許可していない] ということではなく、リモート サービスの特性を知る前に一部の属性を決定できないため、インスタンス化が不可能になっているということです。

    JDK の例は java.io.InputStream です。その read(byte[], int, int) メソッドは java.io.InputStream.read() メソッドを呼び出します。 Read() は抽象メソッドであるため、サブクラスで定義する必要があります。ソースコードから学ぶことができます。

    リーリー

    返事
    0
  • 伊谢尔伦

    伊谢尔伦2017-04-18 10:47:59

    • クラスを継承しているか、インターフェースを実装しているかを確認する必要があります

    • おそらくいくつかの共有メソッドが配置されています

    • そうでない場合は、インターフェースに変更してみてはいかがでしょうか

    返事
    0
  • ringa_lee

    ringa_lee2017-04-18 10:47:59

    一部のパブリック メソッドとインスタンス フィールドが抽出されている可能性があります。

    返事
    0
  • 迷茫

    迷茫2017-04-18 10:47:59

    抽象メソッドのない抽象クラスが特別な意味を持つという意味ではありません。デフォルトの実装を考慮すると、インターフェイスを直接実装するよりもコードが少なくなる可能性があります。一方、抽象クラスに 1 つまたは 2 つの抽象メソッドを保持することを要求することに何の意味があるのでしょうか?

    返事
    0
  • 天蓬老师

    天蓬老师2017-04-18 10:47:59

    逆に、このクラスのサブクラスが特定のメソッドを作成するために。もちろん、これはインターフェイスの要件でもありますが、インターフェイスではすべてのメソッドが抽象メソッドである必要があります。ただし、抽象クラスでは、サブクラスによってオーバーライドする必要のないいくつかのメソッドを事前定義できます。

    抽象クラスとインターフェイスはすべて抽象化のためのものであり、抽象化の利点については説明しません。たとえば、Equal インターフェイスまたはクラスを実装する場合は、2 つのメソッド equalunequal を定義します。インターフェイスを使用して実装する場合、クラスはこれら 2 つのメソッドを実装する必要があります。ただし、抽象クラスを使用して実装する場合は、抽象クラスで unequal!equal として実装できるため、unequal のサブクラス > にあります。 Equal接口或是类,定义两个方法 equalunequal。如果用接口实现,一个类必须实现这两个方法。可是如果用抽象类实现,可以把unequal在抽象类里实现为!equal,这样在其子类里就需要再实现unequal了。

    个人来说更喜欢抽象类一点儿(可是Java不支持多继承)。比如Compareable接口其实还有一个要求,如果a<b && b < ca < c,接口里不能保证这是正确的。当然抽象类也解决不了,但是对于上面的Equal

    個人的には、抽象クラスの方が好きです (ただし、Java は多重継承をサポートしていません)。たとえば、Compareable インターフェイスには実際には a<b && b < c then a という要件があります。インターフェースで正しいことが保証されています。もちろん、抽象クラスでは問題を解決できませんが、上記の Equal の場合、抽象クラスは追加の要件をより適切に満たすことができます。 🎜

    返事
    0
  • PHP中文网

    PHP中文网2017-04-18 10:47:59

    例:
    ベース: spring mvc

    リーリー

    共通のグローバル プロパティ リクエスト レスポンス セッション
    共通のメソッド getLoginUser()
    もちろん、他にもあります (いくつかの共通のプロパティとメソッド)。
    コントローラーがあるのでサービスdaoも利用可能です。
    私は通常、いくつかのリセット コードを親クラスに抽出して使用します。

    返事
    0
  • キャンセル返事