Czy wytłumaczy mi ktoś jaka jest różnica między klasą abstrakcyjną a interfejsem?

0

Jak w tytule. Poza tym, dalej nie rozumiem interfejsów, a bez tego dalej nie ruszę. Nie wystarczy po prostu Ctrl+C, Ctrl+V?...

0

Podstawowa to taka, że interfejsów możesz implementować kilka, a klasę abstrakcyjną rozszerzyć tylko jedną.

0
slayer9 napisał(a):

Podstawowa to taka, że interfejsów możesz implementować kilka, a klasę abstrakcyjną rozszerzyć tylko jedną.

Podstawa, a "bardziej"?

0

To jest najważniejsza różnica, są jeszcze pewne ograniczenia, na przykład, że w klasie wszystkie metody muszą być abstract, ale skoro nie złapałeś jeszcze sensu interfejsów to wątpię, żeby to miało dla ciebie jakieś znaczenie.

0

Jednego nie da się zastąpić drugim.

Interfejsów w ogólności nie da się zastąpić klasami abstrakcyjnymi, bo można dziedziczyć tylko po jednej klasie. A więc to się skompiluje:

interface I1 {}
interface I2 {}
class A implements I1, I2

A to już nie:

abstract class A1 {}
abstract class A2 {}
class A extends A1, A2

Z drugiej strony klasy abstrakcyjnej też nie zastąpisz interfejsami, bo np klasa abstrakcyjna może mieć pola. A więc to się skompiluje:

abstract class A {
  int x;
}

A to już nie:

interface I {
  int x;
}
1

Poszukaj informacji na forum bo było to omawiane już tu ze 100 razy. W skrócie to interfejs może mieć tylko metody ale bez ciała. Jest to pewien rodzaj umowy, że dana klasa implementująca ten interfejs musi dostarczyć implementacji tych metod. Czyli jak widzisz interfejs to wiesz, że klasa implementująca go ma w sobie zawarte wszystkie jego metody (choć nie zawsze). Klasa abstrakcyjna natomiast może mieć metody abstrakcyjne (czyli takie bez ciała) i metody zwykłe( czyli takie z jaką implementacją) Klasa dziedzicząca klasę abstrakcyjną musi dostarczyć implementacje tylko tych metod abstrakcyjnych albo sama stać się abstrakcyjną. Klasa, która posiada choć jedną metodę abstrakcyjną musi być abstrakcyjna. Nie można tworzyć obiektów klasy abstrakcyjnej

0

Interfejsy od Java SE (8?) mogą zawierać metody default z gotową implementacją. Resztę poszukaj na SO, javarevisited.

1 użytkowników online, w tym zalogowanych: 0, gości: 1