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 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.
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(); } }
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.
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? 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.
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); } }
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.
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.
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!