English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Warum wird der statische Methode des Elternklasse in der Unterklasse von Java versteckt?

Wenn wir zwei Klassen haben, eine erweitert die andere Klasse, und wenn diese beiden Klassen Methoden mit gleicher Methode, einschließlich Parameter und Rückgabetyp (z.B. Sample) haben, wird die Methode in der Unterklasse die Methode in der Oberklasse überschreiben.

da es sich um eine Vererbung handelt. Wenn wir die Unterklasse instanziieren, wird eine Kopie der Oberklasse-Mitglieder im Unterklassenobjekt erstellt, daher können beide Methoden im Objekt der Unterklasse verwendet werden.

aber wenn der Methode aufgerufen wird(Sample)wird die Sample-Methode der Unterklasse ausgeführt, um die Methode der Oberklasse zu überschreiben.

Beispiel

class Super{
   public static void sample(){
      System.out.println("Methode der Oberklasse");
   }
}
public class OverridingExample extends Super {
   public static void sample(){
      System.out.println("Methode der Unterklasse");
   }
   public static void main(String args[]){
      Super obj1 = (Super) new OverridingExample();
      OverridingExample obj2 = new OverridingExample();
      obj1.sample();
      obj2.sample();
   }
}

Ausgaberesultat

Methode der Oberklasse
Methode der Unterklasse

Überschreibung statischer Methoden

Wenn die Oberklasse und die Unterklasse Methoden mit gleicher Methode (einschließlich Parameter) und ob sie statisch sind enthalten, wird die Methode in der Oberklasse von der Methode in der Unterklasse verdeckt.

Dieses Mechanismus wird kurz als "Methodenverdeckung" bezeichnet, obwohl die Oberklasse und die Unterklasse statische Methoden mit gleicher Signatur haben, wird es nicht als Überschreibung betrachtet.

Beispiel

class Super{
   public static void demo() {
      System.out.println("Dies ist der Hauptmethode der Oberklasse");
   }
}
class Sub extends Super{
   public static void demo() {
      System.out.println("Dies ist die Hauptmethode der Unterklasse");
   }
}
public class MethodHiding{
   public static void main(String args[]) {
      MethodHiding obj = new MethodHiding();
      Sub.demo();
   }
}

Ausgaberesultat

Dies ist die Hauptmethode der Unterklasse

Der Grund für die Versteckung von Methoden

Der Schlüssel zur Methodenüberschreibung besteht darin, dass, wenn die Superklasse und die Unterklasse Methoden mit gleicher Signatur haben, beide für das Objekt der Unterklasse verfügbar sind. Abhängig vom Typ der Referenz, die das Objekt speichert, wird die entsprechende Methode ausgeführt.

SuperClass obj1 = (Super) new SubClass();
obj1.demo() // ruft die demo-Methode der Superklasse auf
SubClass obj2 = new SubClass();
obj2.demo() //ruft die demo-Methode der Unterklasse auf

Bei statischen Methoden jedoch, da sie nicht zu einer Instanz gehören, müssen Sie den Klassennamen verwenden, um darauf zuzugreifen.

SuperClass.demo();
SubClass.Demo();

Wenn also die Superklasse und die Unterklasse statische Methoden mit gleicher Signatur haben, kann das Objekt der Unterklasse die Kopie der Methode der Superklasse verwenden. Da sie statisch sind, wird der Methodenaufruf bei der Kompilierung automatisch gelöst, daher können statische Methoden nicht überschrieben werden.

Da jedoch Kopien statischer Methoden verwendet werden können, wird die Methode der Unterklasse neu definiert, wenn Sie eine Methode der Unterklasse aufrufen./Versteckte Methode der Superklasse.

Vielleicht gefällt Ihnen das