Είναι η ικανότητα να χρησιμοποιήσουμε μια λειτουργία με
διαφορετικό τύπο, ορίσματα ή παραμέτρους. Υπάρχουν τρία ήδη πολυμορφισμού στη
java.
Θα προκύψει σφάλμα αν δύο υλοποιήσεις έχουν τον ίδιο αριθμό ορισμάτων
με τον ίδιο τύπο ανεξάρτητα:
Μπορεί να προκύψει σφάλμα ακόμα και όταν υπάρχουν ίδια ορίσματα με διαφορετική
σειρά.
public class Example {
public int add(int number1, int number2) {...}
public double add(double number1, int number) {...}
public int add(int number1, int number2, int number3) {...}
// public double add(int number1, double number2) {...}
// public double add(int number1, int number2) {...}
// public int add(int x, int y) {...}
}
Μπορούμε επίσης να ορίσουμε ένα αντικείμενο τύπου υποκλάσης και αναφορά σε
υπερκλάση ή διεπαφή. Το αντικείμενο θα έχει τη συμπεριφορά της υπερκλάσης/διεπαφής
αφου έχουν γίνει τα overrides που ορίζει η υποκλάση.
Parent child = new Child();
interface CalculableArea {
public double area(double base, double height);
}
public class Triange implements CalculableArea {
@ Override
public double area(double base, double height) {return base*height/2;}
}
public class Square implements CalculableArea {
@ Override
public double area(double base, double height) {return base*height;}
}
public class Test {
public static double findArea(CalculableArea shape, double base, double height) {
return shape.area(base, height);
}
public static void main(String[] args) {
Triangle triangle = new Triangle();
Square square = new Square();
double base = 2.0;
double height = 2.0;
System.out.println(findArea(triangle, base, height));
System.out.println(findArea(square, base, height));
}
}
class Parent {
public String whoAmI() {
return "I am parent";
}
}
class Child extends Parent{
@Override
public String whoAmI() {
return "I am child ";
}
public String also() {
return "and only a child";
}
}
public class Test {
public static void main(String[] args) {
Parent parent = new Parent();
Child child = new Child();
Parent child2 = new Child();
System.out.println(parent.whoAmI());
System.out.println(child.whoAmI() + child.also());
System.out.println(child2.whoAmI());
// System.out.println(child2.also());
}
}
class ΟνομαΚλασης<Τυπος1,... ,ΤυποςΝ> {...}
interface ΟνομαΔιεπαφης<Τυπος1,... ,ΤυποςΝ> {...}
class Summarizer<T> {
public T add(T num1, T num 2) {return num1 + num2;}
}
ΟνομαΚλάσης<Τυπος1,... , ΤυποςΝ> αντικείμενο = new ΟνομαΚλασης<>();
public class Test {
public static void main(String[] args) {
Summarizer<Integer> sum1 = new Summarizer<>();
Summarizer<String> sum2 = new Summarizer<>();
System.out.println(sum1.add(3, 5));
System.out.println(sum2.add("foo", "bar"))
}
}