Referencja...do klasy abstrakcyjnej

0

Witam, przerabiając sobie zadania z jednej z książek doszedłem do takiego zadania:

Utwórz klasę abstrakcyjną bez żadnych metod. Wyprowadź z niej klasę pochodną i uzupełnij ją o metodę. Utwórz metodę statyczną, która przyjmuje referencję klasy bazowej, rzutuje ją w dół na typ klasy pochodnej i wywołuje metodę klasy pochodnej.
Zademonstruj działanie całości w metodzie main(), a potem uzupełnij o deklarację metody w klasie bazowej słowem abstract, eliminując tym samym potrzebe rzutowania.

Z tego co wiem nie można stworzyć instancji obiektu klasy abstrakcyjnej, a tutaj każą zrobić metodę, której parametrem jest referencja do klasy abstrakcyjnej.

Jest coś takiego możliwe?
Do tego zadania uklepałem coś takiego:

public abstract class KlasaAbstrakcyjna {
public abstract void print();
}


public class KlasaPochodna extends KlasaAbstrakcyjna {
public void  print(){
    System.out.println("Jestem metoda klasy pochodnej");
}
public static void ref(KlasaAbstrakcyjna s){
    KlasaPochodna k = (KlasaPochodna)s;
    k.print();

}

} 

Zrobiłem to jedynie tworząc referencje do klasypochodnej(Bo w tym wpadku każda klasaPochodna jest klasąAbstrakcyjną).
No ale to jest referencja do obiektu z typem klasy pochodnej a nie klasy Abstrakcyjnej.

0

Klasy Abstrakcyjne
nie ten język ale koncepcja ta sama

0
Shalom napisał(a):

Klasy Abstrakcyjne
nie ten język ale koncepcja ta sama

To, to wiem, ale w zadaniu jest napisane że metoda ma przyjmować referencje klasy bazowej(Co w tym przypadku jest nią klasa abstrakcyjna).
Może źle rozumiem zadanie, ale z tekstu wynika tak że aby wywołać tą metodę potrzebna mi jest referencja klasy bazowej, a nie moge jej utworzyć bo ta klasa jest abstrakcyjna.

Zmieniłem przy okazji kod na taki jaki powinien być.

2

Utwórz klasę abstrakcyjną bez żadnych metod.

abstract class KlasaAbstrakcyjna {}

Wyprowadź z niej klasę pochodną i uzupełnij ją o metodę.

class KlasaPochodna extends KlasaAbstrakcyjna {
void metoda() { System.out.println("hello"); }
}

Utwórz metodę statyczną, która przyjmuje referencję klasy bazowej, rzutuje ją w dół na typ klasy pochodnej i wywołuje metodę klasy pochodnej.

static void metodaStatyczna(KlasaAbstrakcyjna referencja) {
((KlasaPochodna) referencja).metoda();
}

Zademonstruj działanie całości w metodzie main(),

public static void main(String[] args) {
KlasaAbstrakcyjna referencja = new KlasaPochodna();
metodaStatyczna(referencja);
}

a potem uzupełnij o deklarację metody w klasie bazowej słowem abstract, eliminując tym samym potrzebe rzutowania.

abstract class KlasaAbstrakcyjna { abstract void metoda(); }

static void metodaStatyczna(KlasaAbstrakcyjna referencja) {
referencja.metoda();
}
0

Dzięki teraz już rozumiem to zadanie w całości. Na początku dobrze kombinowałem : )

2

Za to rzutowanie w dół to faktycznie powinni palić na stosie...

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