Heim  >  Artikel  >  Java  >  Variablen in Java folgen weder Polymorphismus noch Überschreibung

Variablen in Java folgen weder Polymorphismus noch Überschreibung

王林
王林nach vorne
2023-09-09 18:13:021145Durchsuche

Variablen in Java folgen weder Polymorphismus noch Überschreibung

In der Welt der objektorientierten Programmierung (OOP) sind Polymorphismus und Umschreiben Schlüsselkonzepte, die Programmiersprachen Flexibilität und Vitalität verleihen. Als leistungsstarke OOP-Sprache unterstützt Java diese Funktionen vollständig. Es ist jedoch wichtig zu verstehen, dass diese Merkmale für Methoden in Java und nicht für Variablen gelten. In diesem Artikel werden wir untersuchen, warum Variablen in Java nicht dem Polymorphismus und dem Überschreiben folgen, um ein tieferes Verständnis des Variablenverhaltens von Java zu erlangen.

Polymorphismus in Java

Polymorphismus ist ein griechisches Wort und bedeutet „viele Formen“ und ist ein Grundkonzept von OOP. Dadurch können Objekte unterschiedlichen Typs als Objekte eines gemeinsamen Supertyps behandelt werden, wodurch flexiblerer und wiederverwendbarer Code geschrieben werden kann. In Java wird Polymorphismus durch Vererbung, Schnittstellen und Methodenüberschreibung erreicht.

Beispiel

Sehen wir uns ein Beispiel an

class Animal {
   void sound() {
     System.out.println("The animal makes a sound");
   }
}
class Cat extends Animal {
   @Override
   void sound() {
      System.out.println("The cat meows");
   }
}
public class Main {
   public static void main(String[] args) {
      Animal myAnimal = new Cat();
      myAnimal.sound();
   }
}

Ausgabe

The cat meows

In diesem Szenario ist myAnimal die Animal-Referenzvariable, die auf das Cat-Objekt zeigt. Wenn die Methode sound() für myAnimal aufgerufen wird, wird die Version in der Cat-Klasse aufgerufen, nicht die Version in der Animal-Klasse. Hierbei handelt es sich um Polymorphismus, bei dem die aufzurufende Methode durch den tatsächlichen Objekttyp und nicht durch den Referenztyp bestimmt wird.

Umschreiben in Java

Methodenüberschreibung ist eine spezielle Form des Polymorphismus in Java, bei der eine Unterklasse eine spezifische Implementierung einer in ihrer Oberklasse definierten Methode bereitstellt. Methoden in Unterklassen müssen denselben Namen, denselben Rückgabetyp und dieselben Parameter wie Methoden in der Oberklasse haben.

Warum folgen Variablen nicht dem Polymorphismus und dem Überschreiben?

Warum folgen Variablen nicht dem Polymorphismus und dem Überschreiben? Im Gegensatz zu Methoden folgen Variablen in Java nicht den Konzepten des Polymorphismus und des Überschreibens. Dieser Unterschied ergibt sich aus grundlegenden Unterschieden in der Art und Weise, wie Methoden und Variablen in Objekten existieren und funktionieren

In Java gehören Instanzvariablen zu Instanzen einer Klasse, was bedeutet, dass jede Instanz ihre eigene Kopie der Instanzvariablen hat. Daher hat die Änderung des Werts einer Instanzvariablen in einem Objekt keine Auswirkungen auf andere Objekte derselben Klasse.

Methoden hingegen gehören zur Klasse selbst und nicht zu einer bestimmten Instanz. Das bedeutet, dass Methoden im Gegensatz zu Variablen nicht für jedes Objekt der Klasse eine separate Kopie haben.

Beispiel

Lass uns das vorherige Beispiel durchgehen, aber dieses Mal fügen wir Instanzvariablen hinzu:

class Animal {
   String sound = "The animal makes a sound";
   void makeSound() {
      System.out.println(sound);
   }
}
class Cat extends Animal {
   String sound = "The cat meows";
   @Override
   void makeSound() {
      System.out.println(sound);
   }
}
public class Main {
   public static void main(String[] args) {
      Animal myAnimal = new Cat();
      myAnimal.makeSound();
      System.out.println(myAnimal.sound);
   }
}

Ausgabe

The cat meows
The animal makes a sound

In diesem Code ist myAnimal eine Animal-Referenz, die auf das Cat-Objekt verweist. Der Aufruf der Methode makeSound() für myAnimal gibt „Die Katze miaut“ aus, aber die Zeile System.out.println(myAnimal.sound) gibt „Das Tier macht ein Geräusch“ aus. Warum passiert das? Da die Methode dem Polymorphismus folgt, wird die Methode makeSound() in der Cat-Klasse ausgeführt. Da die Variablen jedoch keinem Polymorphismus folgen, wird die „Soundvariable“ aus der Klasse Animal verwendet

Dieses Verhalten ist auf das Prinzip des Ausblendens von Variablen zurückzuführen. Wenn eine Variable in einer Unterklasse denselben Namen hat wie eine Variable in ihrer Oberklasse, verbirgt die Unterklassenvariable die Oberklassenvariable

Dies bedeutet nicht, dass die Superklassenvariable überschrieben wurde. Die beiden Variablen existieren weiterhin unabhängig voneinander und die verwendete Variable wird durch den Referenztyp und nicht durch den tatsächlichen Objekttyp bestimmt. Deshalb erhalten wir, wenn wir über die Animal-Referenz auf die Soundvariable zugreifen, den Soundwert von der Animal-Klasse und nicht von der Cat-Klasse.

Variables Abdecken und variables Verstecken

In Java werden Variablen durch das Überschreiben ähnlicher Methoden nicht beeinflusst. Stattdessen folgen sie dem Prinzip des Variablenversteckens. Es gibt einen grundlegenden Unterschied zwischen dem Ausblenden von Variablen und dem Überschreiben von Methoden:

  • Methodenüberschreibung – Beim Überschreiben stellt eine Unterklasse eine andere Implementierung einer Methode bereit, die bereits in ihrer Oberklasse definiert ist. Die Entscheidung, welche Methode aufgerufen werden soll, basiert auf dem Typ des tatsächlichen Objekts und nicht auf dem Referenztyp, der Polymorphismus ermöglicht.

  • Ausblenden von Variablen – Wenn beim Ausblenden von Variablen eine Variable in einer Unterklasse denselben Namen hat wie eine Variable in ihrer Oberklasse, verbirgt die Unterklassenvariable die Variable der Oberklasse. Die Entscheidung, welche Variable verwendet werden soll, basiert auf dem Referenztyp und nicht auf dem Typ des tatsächlichen Objekts.

Diese Prinzipien ergeben sich aus der Tatsache, dass Methoden Verhalten darstellen, während Variablen den Zustand darstellen. Das Verhalten kann polymorph sein und überschrieben werden, sodass unterschiedliche Objekttypen unterschiedliche Verhaltensweisen aufweisen können. Im Gegensatz dazu gehört der durch eine Variable dargestellte Zustand zu einer bestimmten Instanz und ist nicht polymorph.

Fazit

Zusammenfassend lässt sich sagen, dass das Verständnis, warum Variablen in Java nicht dem Polymorphismus und dem Überschreiben folgen, wichtige Einblicke in die Funktionsweise von Java liefern kann. Dieses Wissen ist für Java-Programmierer von entscheidender Bedeutung, um Missverständnisse und Fehler bei der Verwendung von Vererbung und Polymorphismus zu vermeiden

Das obige ist der detaillierte Inhalt vonVariablen in Java folgen weder Polymorphismus noch Überschreibung. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:tutorialspoint.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen