2017-05-08 8 views
2
class Abc{ 
public static void hello(){ 
    System.out.println("parent");//Line1 
} 
} 

class Abc1 extends Abc{ 
public void hello(){//Line2 
    System.out.println("child");//Line3 
} 
} 

コンパイラは、静的メソッドができない理由インスタンスメソッドは、静的メソッドをオーバーライドすることができない理由

このインスタンス・メソッドは、Abcの

から

を静的メソッドをオーバーライドすることができないと言って3行でエラーを返しますインスタンスメソッドによってオーバーライドされていますか?

+0

第2の方法では、クラスABC1のオブジェクトインスタンスが必要です。 – reporter

+0

オーバーライドはポリモフィックなインスタンスメソッドでのみ意味がありますか? –

答えて

2

シンプル:言語仕様がそう言います。

欠点静的方法のの一つであること:彼らのために多型がありません!概念的には、は、オーバーライドされるを意味しません。それはすべてこれにあります。

正確にするには、次のインスタンス・メソッドは常にキーワードこの現在の対象となるオブジェクトに対して呼び出され

を:JLSは、静的および非静的メソッドを区別と述べて言いますsuperはメソッド本体の実行中に参照します。

+0

その高い担当者の誰かが明らかな重複に答えてはならない... –

+0

真。しかし、私はここで私の答えを保持する傾向があります - それはそのDUPで見つけることができない特定の洞察力を与えるので、少なくとも明確な言葉ではない。しかし、私はあなたのことを聞きます。次回はもっと難しいでしょう。 – GhostCat

+0

私は答えを見つけることができました。私はAbc1のオブジェクトを作成し、それをAbc(Abc a = new Abc1())に代入すると、実行時にJVMはa.hello()メソッドを呼び出そうとすると静的メソッドを呼び出す必要があるかどうかを理解しません。参照またはインスタンスをオブジェクトとともに使用すると、あいまいさが発生します。 –

関連する問題