Inna możliwość przechowywania referencji do obiektów klas pochodnych

0

Jak działa poniższy kod chyba każdy wie. Jest możliwość przechowywania referencji do obiektów klas pochodnych w jakiś inny sposób niż w tablicy typu klasy bazowej, tak żeby można było wykorzystać później polimorfizm w podobny sposób jak poniżej?

public class Test {

    public static void main(String[] args) {
        Figura[] tab = new Figura[2];
        tab[0] = new Prostokat(10, 2);
        tab[1] = new Trojkat(3, 5);

        for (Figura figura : tab) {
            figura.obliczPole();
        }
    }

}

1

Nie za bardzo wiem czy o to chodzi, ale może pomoże obsługa interfejsów.
Jeżeli dla przykładu klasy:

class abstract Figura implements Shape...
class Prostokat extends Figura...
class Trojkat extends Figura...

, gdzie Shape wygląda następująco:

public interface Shape {
	double obliczPole();
}

to możemy zrobić coś w stylu:

Shape[] tab = new Shape[2];
tab[0] = new Prostokat(10, 2);
tab[1] = new Trojkat(3, 5);

for (Shape sh: tab) {
	sh.obliczPole();
}

Nie wiem, na ile Ci to pomaga i chciałbym zauważyć, że chwilę nie pisałem, więc mogą się pojawiać lekkie błędy.
Przykładowy Gist

Odpowiadając na komentarz, o coś takiego Ci chodziło?:

List<Shape> tab = new ArrayList<Shape>();
tab.add(new Prostokat(10, 2));
tab.add(new Trojkat(3, 5));

for (Shape sh: tab) {
	sh.obliczPole();
}

ewentualnie:

List<Figura> tab = new ArrayList<Figura>();
tab.add(new Prostokat(10, 2));
tab.add(new Trojkat(3, 5));

for (Figura fig: tab) {
	fig.obliczPole();
}

1 użytkowników online, w tym zalogowanych: 0, gości: 1