クラス「XXX」は、抽象として宣言するか、抽象メソッド「xxx」を実装する必要があります



Class Xxx Must Either Be Declared Abstract



最近導入された外部jarパッケージ、この問題は抽象クラスを継承するときに発生します。クラス「XXX」は抽象として宣言するか、抽象メソッド「xxx」を実装する必要があります。ここでIDEAはヒントを提供します。このクラスは抽象として宣言するか、親クラスを実装する必要があります。 'xxx'メソッド(抽象メソッド)。
画像

問題:

ここでは、サブクラスが抽象クラスであることを宣言したくありませんImplemented the abstract method of the parent classですが、それでもこの問題があります。



解決:

後で発見Scope問題、親クラスの抽象メソッドはそれを示していませんPublic、しかしデフォルトdefault、そして親クラスメソッドはExternal packageであるためCannot inherit its default abstract methodにつながる抽象クラス。

総括する:

外部抽象クラスを継承する場合は注意が必要です。他の人がパッケージ化後に異常を使用しないように、親クラスの抽象メソッドを持参する必要がありますpublicキーワード。




添付ファイル:抽象クラスとスコープの知識を確認する

抽象クラス

  • すべての抽象クラスにはサブクラスが必要です(abstractとfinalを同時に表示することはできません。同時に表示すると、コンパイル時にエラーが報告されます)finalによって変更されたクラスには、サブクラス(ターミネーター)を含めることはできません。
  • 抽象クラスのサブクラスが抽象クラスでない場合、抽象クラスのサブクラスは、抽象クラスのすべての抽象メソッドをオーバーライドする必要があります
  • 抽象クラスはサブクラス化によってインスタンス化でき、抽象クラスはオブジェクトを直接インスタンス化してはなりません(抽象メソッドがあるかどうかに関係なく)
  • 抽象クラスはサブクラスに抽象メソッドのオーバーライドを強制するため、abstractとprivateを一緒に使用することはできません。

範囲

範囲と可視性 現在のクラス 同じパッケージ サブクラス その他のパッケージ
公衆
保護された ××
デフォルト ×× ××
民間 ×× ×× ××

保護されたデフォルト

  • 保護:テーブル名メンバー変数またはクラス自体のメソッド、それを含むIn the same packageこのクラスの他のクラスは、他のパッケージのこのクラスのサブクラスに表示されます
  • Defaul:メンバー変数またはメソッドがそれ自体とその場所のみを持っていることを示しますIn the same packageクラスが表示されます。
    親クラスと子クラスが同じパッケージにある場合、子クラスは親クラスのデフォルトのメンバー変数またはメソッドにアクセスできますIf the parent class and the child class are in different packages, there is no access permission
  • プライベートおよびプロテクトを使用してクラスを変更することはできません

抽象と実装の違い

違い 抽象クラス インターフェース
キーワード 概要 インターフェース
メンバー変数 メンバー変数に関する特別な要件や制限はありません パブリック静的変数のみを含めることができます(デフォルトpublic static final変更)
方法 任意のメソッドを含めることができます メソッドのみを含み、抽象化できます(デフォルトではpublic abstract変更)
使用する クラスは1つの抽象クラスのみを継承できます クラスは複数のインターフェースを実装できます

参照:
1、 ピットへJava(8)抽象&実装
二、 Javaのスコープは何ですか
3、 抽象クラス