Hej. To będzie mój pierwszy post na forum więc witam wszystkich i przejdę od razu do rzeczy.
Otóż uczę się od miesiąca Javy (chcę zostać testerem automatyzującym) i natrafiłam na problem przy dziedziczeniu. Otóż:
Załóżmy, że mamy klasę Animal i dziedziczacą po niej klasę Dog.
Jaka jest różnica pomiędzy deklaracją nowego obiektu
1.Animal reks = new Animal(); a
2.Animal fuks = new Dog(); ?
3.Dog max = new Dog(); w miarę ogarniam.
Jak tworzę takie klasy w IntelliJ, to przy tworzeniu obiektu w drugi sposób cała psowosc mojego Fuksa gdzieś znika i nie widzę różnicy w dostępie do metod i pól w przypadkach 1 i 2. Oba mają dostęp do pól i metod wyłącznie w obrębie klasy Animal. Dlaczego?
Czy zapis drugi został stworzony wyłącznie pod klasy abstrakcyjne (bo jakimś cudem jak zrobię abstract Animal, to deklaracja obiektu 2 jest prawidłowa, chociaż jak rozumiem typ Fuksa to będzie Animal, a przecież nie można tworzyć obiektu typu klasy abstrakcyjnej. Pewnie umknął mi jakiś niuans, ale przyznam że im więcej się nad tym zastanawiam i szukam, tym mniej rozumiem.
Wiem, że deklaracja 1 w wypadku abstrakcyjności Animal oczywiście odpada). Czy metoda 2 ma jeszcze jakieś inne zastosowanie (poza utworzeniem obiektu typu Animal którego normalnie nie możnaby było utworzyć przy klasie abstrakcyjnej?).
Bo w momencie kiedy wszystkie klasy są konkretne, to nie widzę ZADNEJ różnicy pomiędzy reksem a fuksem (a na pewno jakaś jest).
Dzięki z góry
reks
nie ma prawa zaistnieć ponieważ ty jako człowiek https://pl.wikipedia.org/wiki/Cz%C5%82owiek_(rodzaj) też należysz doAnimal
czyliAnimal wieronika=new Human();
natomiastAnimal x=Animal();
co to ma być? Czy istnieje coś po prosty zewrzecie? Jak mam odpowiedzieć na pytanie czym się różniwieronika
odx
? Może tym żewieronika
istnieje (no przynajmniej jest wielka szansa że wciąż tak) zaśx
na 100% jakiś abstrakcyjny wymyśl rodem z "since fiction".Animal
musi być byćabstract
, dopiero jak coś konkretnego opisuje klasa to już przestaje być abstrakcyjną.