これは私のスーパークラスです:
class Superclass {
int a=89;
final static void m( int p){
System.out.println("Inside superclass");
}
static void n(){
system.out.print("superclass");
}
}
これは私のサブクラスです::
class Subclass extends Superclass {
int a=90;
static void m( int p){
System.out.println("Inside subclass");
}
static void n(){
system.out.print("subclass");
}
}
メインクラス:
class main {
public static void main(String[] args) {
Subclass.m(89);
new Subclass().n();
}
}
問題は、Javac が静的メソッドでオーバーライド エラーを表示している理由を理解できないことです.PS plzz は、オーバーライドのすべてのルールが非表示にも有効であることを詳しく説明しています。お気に入り
新しいメソッド定義には、同じメソッド シグネチャ (つまり、メソッド名とパラメーター) と同じ戻り値の型が必要です。オーバーライド メソッドのパラメーターを final にするかどうかは、サブクラス メソッドのシグネチャの裁量に委ねられており、パラメーターの final 修飾子は含まれず、型と順序のみが含まれます。
新しい
メソッド定義はメソッドのアクセシビリティを狭めることはできませんが、広げることはできます。新しいメソッド定義は、スーパークラスのオーバーライドされたメソッドの throws 句で指定された例外クラスのすべてまたはまったく指定しないか、または例外クラスのサブセット (サブクラスを含む) のみを指定できます。
私のエラーは次のとおりです: 実行:
スレッド「メイン」での例外 java.lang.RuntimeException: コンパイルできないソース コード - javaapplication3.Subclass の m(int) は javaapplication3.Superclass の m(int) をオーバーライドできません:18) javaapplication3.min.main(JavaApplication3.java:25) で Java 結果: 1
また、メソッドがスーパークラスを拡張するサブクラスによって隠されているときにメソッドのどのバージョンが実行されるかを解決するためにクラス名から呼び出された静的メンバーかどうかを尋ねたいと思います。 . メインクラスの上記のコードで、次のように入力します: new Subclass().n();
コンパイラは、参照変数の型を提供していない場合でも、メソッドのサブクラス バージョンを呼び出す必要があることをどのように認識しますか?