Mein Verständnis war, dass statische Variablen und statische Methoden von einer Klasse sind, nicht von den Klassenobjekten. So funktioniert ein Override
einer statischen Methode nicht in Java, da zum Überschreiben wir eine Instanz einer Klasse erstellen müssen. Aber ich habe heute etwas versucht, das meinem Java-Wissen widerspricht.Wenn statische Methoden nicht überschrieben werden können, wie funktioniert es hier (für Java)?
Bitte folgen Sie diesen Code:
class Parent{
public static void doIt(){
System.out.println("In static method 'doit' of class Parent ");
}
}
class Child extends Parent{
public static void doIt(){
System.out.println("In static method 'doit' of class Child ");
}
}
public class StaticPractise{
public static void main(String[] args){
Parent.doIt();
Child.doIt();
}
}
Der Ausgang der obigen Implementierung ist:
D:\Rahul Shivsharan\MyPractise\JAVA>java StaticPractise
In static method 'doit' of class Parent
In static method 'doit' of class Child
Von diesem Ausgang, dass ich kann verstehen, wenn die Child
-Klasse erweitert die Parent
Klasse, die doit
Methoden sind individuell für jede Klasse, wie sie static
sind. Also ist kein Überschreiben von ihnen erlaubt.
Nun folgen Sie bitte den Code unten, wo @Override
auf die doIt
Methode des Kindes hinzugefügt wird:
class Parent{
public static void doIt(){
System.out.println("In static method 'doit' of class Parent ");
}
}
class Child extends Parent{
@Override // Adding this annotation here
public static void doIt(){
System.out.println("In static method 'doit' of class Child ");
}
}
public class StaticPractise{
public static void main(String[] args){
Parent.doIt();
Child.doIt();
}
}
Die Ausgabe des obigen Codes ein Übersetzungsfehler gibt, wie folgt: es
D:\Rahul Shivsharan\MyPractise\JAVA>javac StaticPractise.java
StaticPractise.java:31: error: method does not override or implement a method from a supertype
@Override
^
1 error
Hier sagt eindeutig, dass die Annotation Override
nicht in static
Methoden angewendet werden kann, da sie nicht übersteuert werden.
Nun folgen Sie bitte den Code unten, wo Child
keine doIt
Methode hat:
class Parent{
public static void doIt(){
System.out.println("In static method 'doit' of class Parent ");
}
}
class Child extends Parent{ /* no doIt method */ }
public class StaticPractise{
public static void main(String[] args){
Parent.doIt();
Child.doIt();
}
}
Die Ausgabe lautet:
D:\Rahul Shivsharan\MyPractise\JAVA>java StaticPractise
In static method 'doit' of class Parent
In static method 'doit' of class Parent
Warum der obige Code kompilieren und ausführen? Ich habe einen Kompilierungsfehler für die Methode doit
für die Klasse Child erwartet, und ich erwartete "Methode nicht gefunden". Ich verstehe nicht.
Bitte folgen Sie auch den untenstehenden Code. Hier ist die doIt
Methode in Parent
jetzt final
.
class Parent{
public static final void doIt(){ // now final
System.out.println("In static method 'doit' of class Parent ");
}
}
class Child extends Parent{
public static void doIt(){
System.out.println("In static method 'doit' of class Parent ");
}
}
public class StaticPractise{
public static void main(String[] args){
Parent.doIt();
Child.doIt();
}
}
Der Ausgang nach den obigen Code ausgeführt wird, wie folgt:
D:\Rahul Shivsharan\MyPractise\JAVA>javac StaticPractise.java
StaticPractise.java:30: error: doIt() in Child cannot override doIt() in Parent
public static void doIt(){
^
overridden method is static,final
1 error
D:\Rahul Shivsharan\MyPractise\JAVA>
Was war ich erwartete, dass der obige Code funktionieren sollte, da die doit
Methoden in jeder Klasse sind statisch, so dass selbst ein final
Schlüsselwort sollte keinen Kompilierungsfehler machen, da die Methode static
ist.
Bitte erklären Sie mir, wie Methode überschreiben funktioniert in statischen Klassen in Java.
- Können statische Methoden außer Kraft gesetzt werden? Wenn ja, wie kommt es dann, dass das Kommentieren von
@Override
fehlschlägt? - Wenn statische Methoden nicht überschrieben werden können, wie kommt dann mein dritter Codeblock in Ordnung?Wenn statische Methoden nicht überschrieben werden können, wie kommt dann das Schlüsselwort
final
?
Gut geschriebene Frage des Tages so weit :) –