Virtuelle Funktion in Java

Mohammad Irfan 12 Oktober 2023
  1. Virtuelle Funktion in Java
  2. Virtuelle Funktionen in Java Bean
  3. Nicht-virtuelle Funktionen in Java
  4. Virtuelle Funktionen in Java-Schnittstelle
Virtuelle Funktion in Java

In diesem Tutorial wird eingeführt, was eine virtuelle Funktion/Methode in Java ist und wie Sie die virtuelle Funktion in Java verwenden.

Eine Funktion, die in einer Basisklasse definiert ist und in einer abgeleiteten Klasse überschrieben werden kann, wird als virtuelle Funktion bezeichnet. Das Konzept der virtuellen Funktion wurde in C++ und in Java standardmäßig verwendet; alle nicht privaten und nicht endgültigen Methoden sind virtuelle Methoden.

In C++ verwenden wir ein virtuelles Schlüsselwort, um virtuelle Funktionen zu erstellen, aber Java hat kein solches Schlüsselwort. Außerdem sind alle nicht-privaten und nicht-finalen Methoden virtuell.

Das Konzept einer virtuellen Funktion ist im Hinblick auf objektorientierte Programmierkonzepte und Polymorphismus nützlich. Lassen Sie uns durch einige Beispiele verstehen.

Virtuelle Funktion in Java

In diesem Beispiel haben wir eine Klasse Human erstellt, die eine virtuelle Methode eat() enthält. Da es sich um eine virtuelle Methode handelt, kann sie in der abgeleiteten/untergeordneten Klasse überschrieben werden, wie im folgenden Beispiel. Beide Methoden haben dieselbe Signatur, und wenn wir die Funktion aufrufen, wird nur die Methode der untergeordneten Klasse ausgeführt. Siehe das Beispiel unten.

class Human {
  void eat(String choice) {
    System.out.println("I would like to eat - " + choice + " now");
  }
}

public class SimpleTesting extends Human {
  void eat(String choice) {
    System.out.println("I would like to eat - " + choice);
  }
  public static void main(String[] args) {
    SimpleTesting simpleTesting = new SimpleTesting();
    simpleTesting.eat("Pizza");
    simpleTesting.eat("Chicken");
  }
}

Ausgabe:

I would like to eat - Pizza
I would like to eat - Chicken

Virtuelle Funktionen in Java Bean

Getter-Funktionen einer Bean/POJO-Klasse sind ebenfalls virtuell und können von der untergeordneten Klasse überschrieben werden. Siehe das Beispiel unten.

public class SimpleTesting extends Student {
  public int getId() {
    System.out.println("Id : " + id);
    return id;
  }
  public String getName() {
    System.out.println("Name : " + name);
    return name;
  }
  public int getAge() {
    System.out.println("Age : " + age);
    return age;
  }

  public static void main(String[] args) {
    SimpleTesting student = new SimpleTesting();
    student.setId(101);
    student.setName("Rohan");
    student.setAge(50);
    student.getId();
    student.getName();
    student.getAge();
  }
}
class Student {
  int id;
  String name;
  int age;

  public int getId() {
    return id;
  }
  public void setId(int id) {
    this.id = id;
  }
  public String getName() {
    return name;
  }
  public void setName(String name) {
    this.name = name;
  }
  public int getAge() {
    return age;
  }
  public void setAge(int age) {
    this.age = age;
  }
}

Ausgabe:

Id : 101
Name : Rohan
Age : 50

Nicht-virtuelle Funktionen in Java

Private oder finale Funktionen sind nicht virtuell und können daher nicht von der untergeordneten Klasse überschrieben werden. In diesem Beispiel haben wir zwei Funktionen erstellt, eine ist final und die zweite ist privat. Wir haben versucht, diese in die untergeordnete Klasse zu überschreiben, aber der Java-Compiler hat aufgrund der nicht virtuellen Funktion einen Fehler ausgegeben. Siehe Beispiel und Ausgabe unten.

class Human {
  // non-virtual method
  final void eat(String choice) {
    System.out.println("I would like to eat - " + choice);
  }
  // non-virtual method
  private void buy(String item) {
    System.out.println("Buy me a " + item);
  }
}
public class SimpleTesting extends Human {
  // non-virtual method
  void eat(String choice) {
    System.out.println("I would like to eat - " + choice);
  }
  // non-virtual method
  void buy(String item) {
    System.out.println("Buy me a " + item);
  }
  public static void main(String[] args) {
    SimpleTesting simpleTesting = new SimpleTesting();
    simpleTesting.eat("Pizza");
    simpleTesting.buy("Pizza");
    simpleTesting.eat("Chicken");
    simpleTesting.buy("Chicken");
  }
}

Ausgabe:

java.lang.IncompatibleClassChangeError: class SimpleTesting overrides final method Human.eat(Ljava/lang/String;)
---Cannot override the final method from Human---

Virtuelle Funktionen in Java-Schnittstelle

Die Funktionen/Methoden einer Schnittstelle sind standardmäßig virtuell, da sie standardmäßig öffentlich sind und von der untergeordneten Klasse überschrieben werden sollen. Im folgenden Beispiel haben wir eine Methode in der Schnittstelle erstellt, in einer Klasse überschrieben und erfolgreich aufgerufen. Siehe das Beispiel unten.

interface Eatable {
  void eat(String choice);
}
public class SimpleTesting implements Eatable {
  public void eat(String choice) {
    System.out.println("I would like to eat - " + choice);
  }
  void buy(String item) {
    System.out.println("Buy me a " + item);
  }
  public static void main(String[] args) {
    SimpleTesting simpleTesting = new SimpleTesting();
    simpleTesting.eat("Pizza");
    simpleTesting.buy("Pizza");
    simpleTesting.eat("Chicken");
    simpleTesting.buy("Chicken");
  }
}

Ausgabe:

I would like to eat - Pizza
Buy me a Pizza
I would like to eat - Chicken
Buy me a Chicken

Verwandter Artikel - Java Function