構文を賢明に修正するために、コードを記述する必要があります。また、私たちのコードがコンパイラにあいまいさを与えないことを理解することも同様に重要です。そのようなあいまいさがある場合、言語設計者はそのようなコードをコンパイルすることを許さないよう注意しています。
クラスはスーパークラスからの動作を継承します。静的メソッドは、単にクラス名を使用してインスタンスからアクセスすることもできます。同じ名前と署名を持つメソッドがあるとします(static
キーワードを除く)、インスタンス上でメソッドを呼び出すと、コンパイラはトスを実行します。プログラマーが何をするつもりなのか、どのように決定するのですか?したがって、言語設計者は、このケースでコンパイルエラーが発生することにしました。
として
http://docs.oracle.com/javase/specs/jls/se8/html/jls-8.html#jls-8.4.8.2
クラスCが宣言または静的メソッドmを継承する場合当たり、その後Mがmの署名はサブシグニチャである任意のメソッドm」を非表示にすると言われていますさもなければ、Cのコードにアクセス可能な、Cのスーパークラスおよびスーパーインタフェース内の、m 'のシグネチャの名前(§8.4.2)。 静的メソッドがインスタンスメソッドを隠す場合、コンパイル時エラーです。
public class Ov extends Am implements Inter {
public static void main(String[] args) {
Ov.fun(); //static method is intended to call, fun is allowed to be invoked from sub class.
Ov obj = new Ov();
obj.fun(); //** now this is ambiguity, static method can
//be invoked using an instance, but as there is
//an instance method also hence this line is ambiguous and hence this scenario results in compile time error.**
}
}
質問は何ですか? – shmosel