[解決済み] なぜJavaでは静的メソッドを抽象化できないのですか?
質問
Javaでは、なぜ抽象的な静的メソッドを定義できないのでしょうか? 例えば、以下のような場合です。
abstract class foo {
abstract void bar( ); // <-- this is ok
abstract static void bar2(); //<-- this isn't why?
}
解決方法は?
その
abstract
アノテーションは、そのメソッドがサブクラスでオーバーライドされなければならない (MUST)ことを示します。
Javaでは
static
メンバ (メソッドまたはフィールド) をサブクラスでオーバーライドすることはできません (これは他のオブジェクト指向言語では必ずしも当てはまりません。SmallTalk を参照してください)。 A
static
メンバは
隠された
とは根本的に異なります。
オーバーライド
.
静的メンバはサブクラスでオーバーライドすることができないので
abstract
アノテーションは適用できません。
余談ですが、他の言語でもインスタンス継承と同じように静的継承をサポートしています。 構文の観点からは、それらの言語では通常、クラス名を文に含める必要があります。 例えば、Javaでは、ClassAでコードを書いていると仮定すると、これらは同等のステートメントです(methodA()が静的メソッドであり、同じシグネチャを持つインスタンスメソッドが存在しない場合)。
ClassA.methodA();
そして
methodA();
SmallTalkでは、クラス名はオプションではないので、この構文になります(SmallTalkでは、"subject" と "verb" を分けるために .を使用せず、代わりに statemend ターミネータとして使用していることに注意してください)。
ClassA methodA.
クラス名は常に必須であるため、クラス階層をたどることでメソッドの正しいバージョン"version"を常に決定することができます。 参考までに、私はときどき
static
Javaを始めたばかりの頃は、静的継承がないことに閉口していました。 さらに、SmallTalkはアヒル型です(そのため、プログラムバイコントラクトをサポートしていません)。
abstract
修飾子でクラスメンバを指定します。
関連
-
javaの実行中に「javaの例外が発生しました」と表示された場合はどうすればよいですか?
-
Spring boot runs with Error creating bean with name 'entityManagerFactory' defined in class path resource
-
アイデア Springboot Web プロジェクトを jar にパッケージ化する場合、Error: 無効または破損した jarfile x.jar 解決策
-
[解決済み] この2回(1927年)を引き算すると、なぜおかしな結果になるのでしょうか?
-
[解決済み] serialVersionUIDとは何ですか、またなぜそれを使用する必要がありますか?
-
[解決済み] Javaはパラメータのデフォルト値をサポートしていますか?
-
[解決済み] Pythonの静的メソッド?
-
[解決済み] インターフェースと抽象クラス(一般的なOO)
-
[解決済み] 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.util.NoSuchElementException 原因解析と解決方法
-
Spring Boot による HTTPS アクセスの設定
-
Java コンパイルエラー - スレッド "main" で例外 java.lang.Error: 未解決のコンパイル問題です。
-
Eclipse起動エラー:javaは起動したが、終了コード=1を返した(ネット上の様々な落とし穴)
-
起動時にEclipseエラーが発生しました。起動中に内部エラーが発生しました。java.lang.NullPoin: "Javaツーリングの初期化 "中に内部エラーが発生しました。
-
IDEA パッケージステートメントの欠落
-
[解決済み] なぜJavaは静的メソッドのオーバーライドを認めないのですか?
-
[解決済み] Javaインターフェースでスタティックメソッドを定義できないのはなぜですか?
-
[解決済み】C#で抽象的な静的メソッドを持つことができないのはなぜですか?
-
[解決済み] なぜインターフェイスで静的メソッドを宣言してはいけないのですか?