• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Obiekt klasy abstrakcyjnej

Object Storage Arubacloud
0 głosów
1,620 wizyt
pytanie zadane 23 maja 2017 w Java przez rubesom Obywatel (1,690 p.)

Hej

Mam klasę abstrakcyjną Figura i w klasie FiguraTest robię tablicę:

		Figura[] figury = new Figura[3];
		figury[0] = new Kolo();
		figury[1] = new Kolo();
		figury[2] = new Figura();

Dostaje komunikat "Cannot instantiate the type Figura" - czyli nie mogę użyć obiektu klasy Figura kiedy jest ona abstrakcyjna - czemu mogłem jednak tak zrobić kiedy tworzyłem tablicę typu Figura? Z tablicami jest inaczej?

4 odpowiedzi

+2 głosów
odpowiedź 24 maja 2017 przez Wiciorny Ekspert (269,710 p.)
wybrane 24 maja 2017 przez rubesom
 
Najlepsza
Figura[] figury = new Figura[3];

nie ma tu instancji ... tworzysz tablice typu Figura, ale nie korzystasz z konstruktora dla tej klasy.... więc jako tako obiekt nie istnieje, ale alokujesz na razie na niego pamięc mówiąc kompilatorowi to będą obiekty TEGO TYPU, ale nie są bo na razie ich nie ma

 

a z racji, że nie mozna tworzyć obiektów potem dostajesz błąd przy figury[2] = new Figura();

komentarz 24 maja 2017 przez rubesom Obywatel (1,690 p.)

Posiłkowałem się tym zdaniem "...Utworzenie nowego obiektu - czyli instancji klasy dokonujemy za pomocą słowa kluczowego new ..." źródło

 

Z tego co Ty napisałeś mogę zapamiętać, że instancja powstaje dopiero przy użyciu/wykorzystaniu konstruktora?

komentarz 24 maja 2017 przez Wiciorny Ekspert (269,710 p.)

jakby tak było do końca to alokując pamięć na tablice tworzylibyśmy od razu obiekty.

Załóżmy, że masz ... parking na którym pozwalasz tylko BMW parkować?

no to robisz tablice BWM[] parking= new BMW[10];  ustalasz ze 10 miejsc masz na te bmki

Ale nie masz obiektu BMW jeszcze? :D  bo nie ma samochodów.

I tak i nie, bo zauważ że nie musisz konstruktora pisać w klasie mimo to on bedzie i wtedy bedzie domyslny.

Ale tworzac jakis obiekt Klasa cos= new Klasa(); tworzysz juz to "COŚ" jako wzór klasy, przy naszym przykładzie BMW to bedzie obiekt majacy taki znaczek, silnik, etc etc... rozumiesz? tam w klasie może być wiele metod, zmiennych ( atrybutów ). Parking nie ma silnika, koła etc. Natomiast BWM jako obiekt tak 

+2 głosów
odpowiedź 23 maja 2017 przez Michał Kazula Pasjonat (19,540 p.)
Nie można stworzyć instancji do klasy abstrakcyjnej! na podstawie klasy abstrakcyjnej tworzysz klasę dziedziczącą a nie obiekt.
komentarz 24 maja 2017 przez rubesom Obywatel (1,690 p.)
Moje pytanie wynika z tego, że mogę zrobić tak:

Figura[] figury = new Figura[3];

I nie dostaję żadnego błędu, a jest to przecież instancja do klasy abstrakcyjnej?

Dostaję dopiero komunikat o błędzie przy linijce:

figury[2] = new Figura();

Czemu mogę zrobić instancje do obiektu klasy abstrakcyjnej kiedy jest to tablica a w innym przypadku już nie?

1
komentarz 24 maja 2017 przez Wiciorny Ekspert (269,710 p.)

 

odpisałem wyżej, tablica nie jest instancja-instancja to reprezentant/obiekt. A ty tworzysz "miejsce na przechowywanie" obiektów tego typu ale nie korzystasz z konstruktora klasy i nie tworzysz obiektu

0 głosów
odpowiedź 23 maja 2017 przez Arkadiusz Sikorski Pasjonat (20,160 p.)

Przez użycie operatora new dla klasy Figura, próbujesz utworzyć dynamicznie alokowany obiekt klasy abstrakcyjnej (tego nie robimy!).

Stwórz dynamicznie alokowaną tablicę wskaźników klasy Figura i przypisz do tych wskaźników koła/kwadraty.

0 głosów
odpowiedź 24 maja 2017 przez KubenQPL Maniak (62,820 p.)

Możesz dziedziczyć anonimowo z klasy abstrakcyjnej lub interfejsu

figura[2] = new Figura(){
//implementacja method 
//ewentualne dodatkowe metody jakie chcesz mieć w tej klasie
}

Lub możesz normalnie zrobić klasę która dziedziczy po abstrakcyjnej klasie i jej zrobić nową instancję.

Podobne pytania

0 głosów
1 odpowiedź 140 wizyt
pytanie zadane 18 listopada 2020 w Java przez Szox Nowicjusz (230 p.)
0 głosów
2 odpowiedzi 533 wizyt
pytanie zadane 5 maja 2019 w Java przez poldeeek Mądrala (5,980 p.)
0 głosów
2 odpowiedzi 268 wizyt
pytanie zadane 5 kwietnia 2017 w Java przez TheHabuUser Nowicjusz (230 p.)

92,551 zapytań

141,393 odpowiedzi

319,523 komentarzy

61,936 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...