Lekcja 2

Kolokwium z obiektowości

Przykładowe zadanie z rozwiązaniem.

Treść zadania

Dane są klasy: A, B, C. A jest klasą abstrakcyjną, która wymaga implementacji metody random(), która zwraca pseudolosową liczbę. B i C dziedziczy po A. W klasie C istnieje pole int max, które określa maksymalny zakres losowania. Pole to można ustawić tylko i wyłącznie za pomocą konstruktora.


Dodatkowo istnieją dwa interfejsy: D oraz E. Interfejs D zawiera wszystkie metody z interfejsu E. Każdy z intefejsów posiada co najwyżej po jednej metodzie. Klasa F implementuje interfejs D, przez co posiada metody sum(int x, double y) oraz sum(double x, int y). Zadaniem tych metod jest dodanie liczby i zwrócenie wyniku jako zmienna typu double, przy czym tylko w jednej z nich można dodać liczby.


Utwórz po jednym obiekcie z klas C, F oraz anonimową implementację interfejsu D i przedstaw działanie każdej z utworzonej metody / konstruktora w metodzie main.


Rozwiązanie znajduje się poniżej.

Rozwiązanie

abstract class A {
    abstract int random();
}

class B extends A {

    int random() {
        return (int)(Math.random() * 1000);
    }
}

class C extends A {

    private int max;

    C(int max) {
        this.max = max;
    }

    int random() {
        return (int)(Math.random() * (max + 1));
    }
}

interface D extends E {

    double sum(int x, double y);
}

interface E {

    double sum(double x, int y);
}

class F implements D {

    public double sum(int x, double y) {
        return sum(y, x);
    }

    public double sum(double x, int y) {
        return x + y;
    }
}

public class Main {
    public static void main(String[] args) {
        C c = new C(500);
        System.out.println(c.random());
        F f = new F();
        System.out.println(f.sum(100.0, 10));
        System.out.println(f.sum(10, 100.0));
        E e = new E() {

            public double sum(double x, int y) {
                return x + y;
            }
        };
        System.out.println(e.sum(100.0, 10));
    }
}