[解決済み] 最終静的手法の挙動
2022-06-02 07:18:13
質問
静的メソッドで修飾子を使って遊んでいるうちに、奇妙な振る舞いに出くわしました。
ご存知のように、静的メソッドはインスタンスではなくクラスに関連付けられているため、オーバーライドすることはできません。
ですから、以下のようなスニペットがあれば、うまくコンパイルされます。
//Snippet 1 - Compiles fine
public class A {
static void ts() {
}
}
class B extends A {
static void ts() {
}
}
しかし、クラスAの静的メソッドにfinal修飾子を付けると、コンパイルに失敗します。 B の ts() は A の ts() をオーバーライドできません。 .
staticメソッドは全くオーバーライドできないのに、なぜこのようなことが起こるのでしょうか?
どのように解決するのですか?
静的メソッドはオーバーライドできませんが、非表示にすることは可能です。そのため
ts()
メソッドはオーバーライドされません(ポリモーフィズムの対象ではありません)。
ts()
をオーバーライドするわけではありませんが、それを隠蔽します。もしあなたが
ts()
を B で呼び出すと (NOT
A.ts()
または
B.ts()
... ただ
ts()
) の場合、Bのものが呼ばれ、Aは呼ばれません。これは多相性の対象ではないので、呼び出しは
ts()
の呼び出しはBのものにリダイレクトされることはありません。
キーワード
final
を指定すると、そのメソッドを非表示にすることができなくなります。そのため、非表示にすることはできず、非表示にしようとするとコンパイラーエラーが発生します。
これが役立つといいのですが。
関連
-
Java Exceptionが発生しました エラー解決
-
[解決済み] Pythonで静的なクラス変数は可能ですか?
-
[解決済み] メソッドと関数の違いは何ですか?
-
[解決済み] Java内部クラスと静的ネストされたクラス
-
[解決済み] 静的クラスとシングルトンパターンの違い?
-
[解決済み] C言語における「static」の意味とは?
-
[解決済み] IntelliJのインスペクションで「シンボルを解決できない」と表示されたが、コードはコンパイルされる
-
[解決済み] Javaにおける "final class "の意味とは?
-
[解決済み] Javaリフレクションを用いた静的なプライベートfinalフィールドの変更
-
[解決済み】KotlinでJavaの静的メソッドに相当するものは何ですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
Java Error スレッド "AWT-EventQueue-0" で例外発生 java.lang.
-
Spring Boot による HTTPS アクセスの設定
-
をインスタンス化することができません。
-
javaの模造品QQ WeChatのチャットルーム
-
スキャナは、タイプに解決することはできません最もルーキー初心者の質問
-
VMの初期化中にエラーが発生しました java/lang/NoClassDefFoundError: java/lang/Object
-
spring aop アドバイスからの Null 戻り値が、サマリーのプリミティブ戻り値と一致しない。
-
Eclipse起動エラー:javaは起動したが、終了コード=1を返した(ネット上の様々な落とし穴)
-
java 例外。Javaツールの初期化
-
コミットには何も追加されないが、未追跡のファイルが存在し、gitで未追跡のファイルに対する完璧な解決策