web-dev-qa-db-ja.com

サブクラスによるオーバーライドを禁止するJavaメソッド

Javaクラスにメソッドがあり、そのクラスのサブクラスがそのメソッドをオーバーライドできないようにしたいとします。それはできますか?

35
John

次のように、メソッドをfinalとして宣言できます。

public final String getId() {
   ...
}

詳細については、 http://docs.Oracle.com/javase/tutorial/Java/IandI/final.html を参照してください。

56
yotommy

メソッドを作成するだけですfinal

8
s.s.o

メソッドがビルドされたAPIの一部ではなく、サブクラスによって直接呼び出されない場合は、単にメソッドをprivateにすることをお勧めします。

クラス階層が単一のパッケージに含まれている場合は、メソッドをパッケージスコープに作成します(スコープのキーワードなし)。したがって、外部(他の独自のパッケージを含む)のみがアクセスできず、したがってオーバーライドできません。

メソッドが実際にはAPIの一部ではないが、外部でもサブクラスで表示する必要がある場合は、protectedおよびfinalにすることをお勧めします。

最後に、メソッドがAPIの一部である場合は、それをpublicおよびfinalにします。

4
Mik378