Wpis z mikrobloga

Mirk, wyjaśni ktoś w punktach konkretnie jakie są różnice pomiędzy interfejsem, a klasą abstrakcyjną? Na tę chwilę wiem jedynie tyle, że nie można tworzyć obiektów klasy abstrakcyjnej, ani interfejsu. Interfejs się implementuje, a nie dziedziczy. Klasa abstrakcyjna posiada metody bez ciała (?). Prosiłbym o konkrety, a nie o udowadnianie mi braku kompetencji :D

#naukaprogramowania #java
  • 27
@von_Schuttenbach: klasa abstrakcyjna może mieć implementacje metod nieabstrakcyjnych (może w ogóle nie mieć metod nieabstrakcyjnych, tylko modyfikator abstract obok class). Może mieć pola, których interfejs mieć nie może. Może mieć metody prywatne i protected(te abstrakcyjne lub nie),Interfejs może mieć tylko stałe i sygnatury publicznych metod.
Sprawa trochę się komplikuje w Javie 8, gdzie dochodzą domyślne metody czy jak im tam, ale tego nie poruszam, bo jeszcze nie korzystałem i się nie
@von_Schuttenbach:

Interfejs może tylko posiadać definicje metod, klasa abstrakcyjna może mieć i to i to (część metod może mieć tylko definicję a część implementację). Klasa abstrakcyjna posiada konstruktor, interfejs nie. Można dziedziczyć tylko po jednej klasie abstrakcyjnej, za to można implementować wiele interfejsów.
Interfejs może też posiadać pola.
@von_Schuttenbach
- możesz inplementowac wiele interfejsów ale extendowac tylko jedna klase,
- klasa abstrakcyjna może mieć zmienne i stałe,
- klasa abstrakcyjna może mieć zdefiniowane metody i mogą one robić różne operacje również na zmiennych

Jeśli o czymś zapomniałem lub przekłamałem to przepraszam
@fegwegw: Mówię, że akurat na początku w to ja osobiście bym się nie zagłębiał. Zazwyczaj i tak z samego początku osobnik nie wie jak wykorzystać dobrze tego typu featury. Potem to przychodzi z czasem. Takie moje zdanie, ale oczywiście masz rację. Zresztą default methods w javie i tak są koślawe ( ͡° ͜ʖ ͡°)
@von_Schuttenbach: @sorek: @walezbani:

Koncepcyjnie:

Klasa abstrakcyjna to klasa definiująca pewną określoną implementacje zachowań. Klasy dziedziczone to klasy które MOGĄ rozwijać / zmieniać funkcje klasy bazowej. Przykładowo:

Klasa bazowa Auto ma funkcje jedz() - która jedzie do przodu, hamuj() która naciska hamulce. Klasa Opel dziedziczy z klasy Auto ale nie zmienia implementacji tych funkcji. Klasa Volvo dziedziczy z klasy Auto ale przeciąża funkcję hamuj() dodając tam obsługę ABSu. Klasa Mercedes
@von_Schuttenbach: Próbowałeś zamiast prosić o wiedzę podaną na tacy wpisać w google "interfejs klasa abstrakcyjna różnica" lub "interface abstract class difference"? O ile w przypadku polskiego zapytania będzie to jakieś 90%, to dla angielskiego odpowiednika absolutnie każdy odnośnik z pierwszej strony w Google wyjaśni Ci na czym polega różnica.
Moja wypowiedź nie ma na celu ośmieszenia Cię, pragnę jednak zwrócić uwagę na fakt, że umiejętność korzystania z dostępnych źródeł jest bardzo
@greebqmaster:
Próbowałem i wyjaśnienie jest niescisłe, troche nad tym siedziałem + jak sam widzisz koledzy wyżej też się trochę gubią. Jedni mówią ze interfejs może implementowac a ktoś inny nie może. Tak samo w przypadku pól jedni mówią a inni mówią b. Jeżeli masz wiedzę to moze przekazesz mi ja na priv? :)
"Stała" to jedno z właściwości pola. Ale to dalej pole (member) klasy/interfejsu.


@fegwegw: czepianie się definicji. Mówiąc "możesz mieć stałe, nie możesz mieć pól" wyraziłem się wystarczająco klarownie