Wpis z mikrobloga

#programowanie #java

Nie potrafie dobrze zrozumieć co to interfejs i czym sie różni od klasy abstakcyjnej... WIem,że interfejs to wszystkie metody abstakcyjne,ale nic mi to nie mówi,gdyby ktoś mnie zapytał o to na rozmowie o pracę :<

Ktoś pomoże?
  • 8
@yras8: w silniku masz świecie, świeca ma swój interfejs który definiuje jej wymiary, gdzie ma być generowany łuk eketryczny itd. i o ile ten interfejs jest spełniany to każda świeca każdego producenta wejdzie o ile spełnia ten interfejs, np. jeden może zrobić bardzo tanią która ma w zimie probelmy z zapalaniem, a drugi b drogą sportową

klasa abstrakcyjna ma już pewne detale implementacyjne zrobione np. domyślne działanie i tylko resztę można
@yras8: technicznie nie różnią się zbyt wiele, szczególnie po zmianach z nowszych wersji Javy.

Różnica jest w sposobie zastosowania. Pomyśl o klasie abstrakcyjnej jako niepełnej klasie - obiekt tej klasy ma pola, metody i wykonuje pewne działania tak jak każda inna klasa. Są jednak fragmenty niezdefiniowane, które za pomocą dziedziczenia należy wypełnić i powiedzieć że ma je wykonać tak i tak. Wyobraź sobię klasę Samochód - można mu zdefiniować kilka metod
@yras8: różnice pomiędzy interfejsami a klasami abstrakcyjnymi zacierają się z kolejnymi wydaniami javy. Musisz sam znaleźć różnice, bo trochę tego jest. Interfejs najprościej opisać jako "ograniczona abstrakcyjna klasa". Jak to bywa w programowaniu lepiej używać ograniczonych ficzerów, więc zazwyczaj używa się interfejsów. Dodatkowe ficzery, które zapewnia klasa abstrakcyjna są raczej uważane za szkodliwe w projektowaniu klasy.

klasa abstrakcyjna ma już pewne detale implementacyjne zrobione np. domyślne działanie i tylko resztę można
@yras8: Czysto technicznie to w klasie abstrakcyjnej mozesz miec dodatkowo pola i okreslic scope metod (np. protected). Jesli masz jakas wieksza czesciowa implementacje na konkretnych danych, ktora ma miec kilka wariantow, to z reguly lepiej uzyc klasy abstrakcyjnej, zeby sie nie powtarzac.
@yras8: Dodam jeszcze, bo nie padło powyżej: klasa może dziedziczyć (extends) najwyżej po jednej klasie bazowej, nawet jeżeli jest ona abstrakcyjna. Za to może implementować (implements) dowolnie dużo interfejsów.