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

Dziedziczenie a interfejs

Object Storage Arubacloud
0 głosów
1,635 wizyt
pytanie zadane 10 maja 2015 w Java przez rubesom Obywatel (1,690 p.)
Hej

Jak jest praktyczna roznica miedzy stosowaniem interfejsow a zwyklego dziedziczenia w javie?

Interfejs rozumiem ogolnie jak owielodziedziczenie, wiem ogolnie jak wyglada konstrukcja interfejsu.

Chodzi mi o to, ze skoro moge zrobic interfejs miedzy wszystkim klasami (tego wymagajacymi), to czy nie wygodniej jest zrezygnowac z klasycznego dziedziczeni?

Przeczytalem gdzies, ze interfejsy obciazaja cala aplikacje i zastanawiam sie czy to jest jedyny powod, zeby nie korzystac z nich jezeli nie wymaga tego specyfika zadania?

3 odpowiedzi

+1 głos
odpowiedź 10 maja 2015 przez JachuPL Bywalec (2,950 p.)

Interfejsy od dziedziczenia różnią się głównie jedną ważną rzeczą: Interfejsy definiują jedynie nazwy metod, typ zwracany i przyjmowane parametry, zaś dziedziczenie pozwala na użycie danej metody w takiej postaci, w jakiej została zaimplementowana w klasie bazowej. Odpowiednikiem interfejsów są funkcje czysto wirtualne w C++:

virtual int dodaj(int a, int b) = 0;

Interfejsu używasz głównie tam, gdzie potrzebujesz określonego zestawu metod (np. public T Dodaj(T a, T b) czy public void Przesun(T x, T y)), ale w zależności od klasy, która ma jej używać, musisz zdefiniować nowy algorytm (np inaczej dodaje się liczby rzeczywiste, a inaczej liczby zespolone).

+1 głos
odpowiedź 10 maja 2015 przez Dorion300 Szeryf (90,250 p.)
edycja 10 maja 2015 przez Dorion300

Dziedziczenie klas to kopiuj wklej z wcześniejszych klas.

Interface to oznazenie klasy że zawiera to i to. (To taki łącznik)

Dzięki czemu można zrobić zmienną o typie interfejsu i w niej przechowywać WSZYSTKIE obiekty które dziedziczą z tego samego interfejsów, intefejsy można łączyć itd. itp.

Zastosowanie interfejsów jest duże.

np. Przyjmujemy w funkcji że zmienna powinna być o typie tego interfejsu.Więc użytkownik musi dopisać do właśnej klasy z jakiego interfejsu dziedziczy.

Można z wielu interfejsów dziedziczyć na raz.

 

Tu masz przykład z interfejsami:

Main:

import java.io.*;


public class Main {
    
    public static void main(String[] args) {
        
        interfejs[] tab = new interfejs[5];
        
       for(int i=0;i<5;i++)
       {
           if((i%2) == 0)tab[i] = new Klasówka(i,i+5);
           else tab[i] = new Klasówka2(i+3,i,i+425,"Hello my friend");
       }
       
       for(int i=0;i<5;i++)
       {
           tab[i].wypisz();
       }
        
        
    }
}
public class Klasówka implements interfejs {
    int a, x;
    
    public void wypisz()
    {
        System.out.println("Zmienna a: "+a);
        System.out.println("Zmienna X: "+x);
    }
    public Klasówka(int a, int x)
    {
        this.a = a;
        this.x = x;
    }
}
public class Klasówka2 implements interfejs {
    int a, x,j;
    String hi;
    
    public void wypisz()
    {
        System.out.println("Zmienna a: "+a);
        System.out.println("Zmienna X: "+x);
        System.out.println("Zmienna j: "+j);
        System.out.println("Zmienna hi: "+hi);
    }
    public Klasówka2(int a, int x, int j, String hi)
    {
        this.a = a;
        this.x = x;
        this.j = j;
        this.hi = hi;
    }
}
public interface interfejs {
    public void wypisz();
}

 

komentarz 4 sierpnia 2016 przez itcloud Gaduła (3,380 p.)
Wiem, że stary wątek, ale mam pytanie.

public interface interfejs {

    public void wypisz();

}

Po co ten interfejs w ogóle? NIe rozumiem idei. Przecież jakby go nie było, obie klasy Klasówka1 i Klasówka2 najwyraźniej nadal miałyby te dwoje metody wypisz().
0 głosów
odpowiedź 10 maja 2015 przez Kuba Stary wyjadacz (12,460 p.)
W jaki sposób obciążąją? Nigdy o tym nie słyszałem.

Niektórzy, bardziej doświadczeni, w obecnych czasach uważają, że dziedziczenie w Javie to błąd i należy go unikać.

Podobne pytania

+1 głos
2 odpowiedzi 2,721 wizyt
pytanie zadane 12 maja 2015 w Java przez rubesom Obywatel (1,690 p.)
0 głosów
1 odpowiedź 628 wizyt
pytanie zadane 15 grudnia 2018 w Java przez itcloud Gaduła (3,380 p.)
0 głosów
2 odpowiedzi 239 wizyt
pytanie zadane 24 czerwca 2017 w Java przez ewazdomu Początkujący (320 p.)

92,576 zapytań

141,426 odpowiedzi

319,652 komentarzy

61,961 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!

...