Referencja...do klasy abstrakcyjnej

Referencja...do klasy abstrakcyjnej
C8
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 80
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:

Kopiuj
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.

Shalom
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Space: the final frontier
  • Postów: 26433
0

Klasy Abstrakcyjne
nie ten język ale koncepcja ta sama

C8
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 80
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ć.

Wibowit
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: XML Hills
2

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

abstract class KlasaAbstrakcyjna {}

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

Kopiuj
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.

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

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

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

Kopiuj
static void metodaStatyczna(KlasaAbstrakcyjna referencja) {
referencja.metoda();
}
C8
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 80
0

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

airborn
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 274
2

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

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.