Überschreiben vs Überladen in Java

Einführung

Überschreiben und Überladen sind die Kernkonzepte der Java-Programmierung. Sie sind die Möglichkeiten, Polymorphismus in unseren Java-Programmen zu implementieren. Polymorphismus ist eines der OOPS-Konzepte.

Screenshot of Java code with arrows pointing at instances where overloading and overriding are occurring.

Wenn die Methodensignatur (Name und Parameter) in der Superklasse und der Kindklasse gleich sind, wird es als Überschreiben bezeichnet. Wenn zwei oder mehr Methoden in derselben Klasse denselben Namen, aber unterschiedliche Parameter haben, wird es als Überladen bezeichnet.

Vergleich von Überschreiben und Überladen

Overriding Overloading
Implements “runtime polymorphism” Implements “compile time polymorphism”
The method call is determined at runtime based on the object type The method call is determined at compile time
Occurs between superclass and subclass Occurs between the methods in the same class
Have the same signature (name and method arguments) Have the same name, but the parameters are different
On error, the effect will be visible at runtime On error, it can be caught at compile time

Beispiel für Überschreiben und Überladen

Hier ist ein Beispiel für Überladen und Überschreiben in einem Java-Programm:

package com.journaldev.examples;

import java.util.Arrays;

public class Processor {

	public void process(int i, int j) {
		System.out.printf("Processing two integers:%d, %d", i, j);
	}

	public void process(int[] ints) {
		System.out.println("Adding integer array:" + Arrays.toString(ints));
	}

	public void process(Object[] objs) {
		System.out.println("Adding integer array:" + Arrays.toString(objs));
	}
}

class MathProcessor extends Processor {

	@Override
	public void process(int i, int j) {
		System.out.println("Sum of integers is " + (i + j));
	}

	@Override
	public void process(int[] ints) {
		int sum = 0;
		for (int i : ints) {
			sum += i;
		}
		System.out.println("Sum of integer array elements is " + sum);
	}

}

Überschreiben

Die Methode process() und die Parameter int i, int j in Processor werden in der Unterklasse MathProcessor überschrieben. Zeile 7 und Zeile 23:

public class Processor {

    public void process(int i, int j) { /* ... */ }

}

/* ... */

class MathProcessor extends Processor {
 
    @Override
    public void process(int i, int j) {  /* ... */ }

}

Und die Methode process() und int[] ints in Processor werden auch in der Unterklasse überschrieben. Zeile 11 und Zeile 28:

public class Processor {

    public void process(int[] ints) { /* ... */ }

}

/* ... */

class MathProcessor extends Processor {

    @Override
    public void process(Object[] objs) { /* ... */ }

}

Überladen

Die Methode process() wird in der Klasse Processor überladen. Zeilen 7, 11 und 15:

public class Processor {

    public void process(int i, int j) { /* ... */ }

    public void process(int[] ints) { /* ... */ }

    public void process(Object[] objs) { /* ... */ }

}

Schlussfolgerung

Im diesem Artikel haben wir das Überschreiben und Überladen in Java behandelt. Das Überschreiben tritt auf, wenn die Methodensignatur in der Oberklasse und der Unterklassenklasse gleich ist. Das Überladen tritt auf, wenn zwei oder mehr Methoden in derselben Klasse denselben Namen, aber unterschiedliche Parameter haben.

Source:
https://www.digitalocean.com/community/tutorials/overriding-vs-overloading-in-java