Προγραμματισμός ΙΙ: Πολυμορφισμός

Προγραμματισμός ΙΙ

Πολυμορφισμός

Πολυμορφισμός

Στατικός πολυμορφισμός και Υπερφόρτωση

Παράδειγμα

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) {...}
}

Δυναμικός πολυμορφισμός

Παράδειγμα

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));
    }
}

Παράδειγμα2

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";
    }
}

Παράδειγμα2(συνέχεια)

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"))
    }
}

Creative Commons Licence
This work is licensed under a Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License.