Wir müssen unseren Code so schreiben, dass er syntaktisch korrekt ist. Genauso wichtig ist es zu verstehen, dass unser Code dem Compiler keine Mehrdeutigkeit verleiht. Falls eine solche Mehrdeutigkeit vorliegt, haben die Sprachentwickler darauf geachtet, dass der Code nicht kompiliert wird.
Eine Klasse erbt die Verhaltensweisen ihrer Superklasse. Sie können auf statische Methoden zugreifen, indem Sie einfach den Klassennamen und auch die Instanz verwenden. Angenommen, es gibt eine Methode mit demselben Namen und derselben Signatur (mit Ausnahme des Schlüsselworts static
), wird beim Aufrufen der Methode für die Instanz der Compiler für einen Toss ausgeführt. Wie wird es entscheiden, was der Programmierer beabsichtigt zu tun, welche der beiden Methoden will er oder sie anwenden? Daher haben die Sprachdesigner entschieden, dass dieser Fall zu einem Kompilierungsfehler führt.
Wie pro
http://docs.oracle.com/javase/specs/jls/se8/html/jls-8.html#jls-8.4.8.2
Wenn eine Klasse C erklärt oder erbt eine statische Methode m, dann m gesagt wird jede Methode m‘zu verbergen, wobei die Unterschrift von m ein Untersignatur ist (§8.4.2) der Signatur von m ', in den Oberklassen und Superschnittstellen von C, die sonst für Code in C zugänglich wären. Es ist ein Fehler bei der Kompilierung, wenn eine statische Methode eine Instanzmethode ausblendet.
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.**
}
}
Was ist die Frage? – shmosel