Java [1242]

Zapisz się
Dodaj kartkę Dodaj bana
Powód wlepienia kartki
Wybierz wątek docelowy z listy lub wpisz jego ID
  • MAro

    Czy ktos mógłby wyjaśnic mi sposób działania interfaców w Javie?? Wiem, że zastępuje ona klase abstrakcyjną i mówi co obiekt może a czego nie może. Ale co dalej?
  • Anonim

    Polimorfizm:)

    Ogólnie możesz dziedziczyć tylko z jednej klasy, a interfejsów możesz implementować ile wlezie. Nie dokońca zastępuje klasę abstrakcyjną ponieważ, interfejs nie posiada pól, tylko same deklaracje metod(bez definicji).

    Możesz stworzyć kilka klas implementujących dany interfejs i wywołać metody z tego właśnie interfejsu w jakiejś funkcji( przyjmującej za argument włąśnie klasę implementującą interfejs lub anonimową klasę wewnętrzną)

    np.

    interface IZwierze{
    public void dajGlos();
    }
    class Kot implements IZwierze i{
    public void dajGlos(){
    System.out.println("miau");
    }
    }
    class Pies implements IZwierze{
    public void dajGlos(){
    System.out.println("haaau");
    }
    }

    public class Interfejsy{
    public void wykonaj( IZwierze zwierze){
    zwierze.dajGlos();
    }
    public static void main(String[] args){
    wykonaj(new Kot());
    wykonaj(new Pies());
    wykonaj(new IZwierze(){
    public void dajGlos(){
    System.out.println("KWA KWA");
    }});
    }
    }

    Dobry zwyczaj zaczynać nazwę intefejsu od dużego I.
  • Scythe

    >Dobry zwyczaj zaczynać nazwę intefejsu od dużego I.

    Ciekawe dlaczego żaden z podstawowych interfejsów Javy jakoś tego nie przestrzega... Poproszę o link do powszechnie uznawanej strony, która uznaje zaczynanie nazw interfejsów od literki I.
  • bartkiller

    >Scythe napisał
    >>Dobry zwyczaj zaczynać nazwę intefejsu od dużego I.
    >
    >Ciekawe dlaczego żaden z podstawowych interfejsów Javy
    >jakoś tego nie przestrzega... Poproszę o link do
    >powszechnie uznawanej strony, która uznaje zaczynanie nazw
    >interfejsów od literki I.

    msdn ?; P
  • Scythe

    1) link
    2) bo jak wiemy Microsoft jest wykładnią Javowych standardów nazewnictwa
    3) http://java.sun.com/docs/codeconv/h...

    Ja wiem, że w C/C++/C# VS'owy Intellisense się gubi, że rozróżnianie atrybutów obiektów nie jest tak proste jak w Eclipse z Javą i konwencje m_*, C*, I*, etc. są przydatne. IMO w Javie nie ma to sensu - wciśnięcie jednego klawisza pozwala natychmiast dowiedzieć się, czy dana deklaracja dotyczy interfejsu czy klasy.
    Zresztą, jak przytoczyłem w 3), oficjalne sunowskie konwencje nie mówią nic o IInterfejsach
  • bartkiller

    >Scythe napisał
    >1) link
    >2) bo jak wiemy Microsoft jest wykładnią Javowych
    >standardów nazewnictwa
    >3)
    > http://java.sun.com/docs/codeconv/h...
    >
    >Ja wiem, że w C/C++/C# VS'owy Intellisense się gubi, że
    >rozróżnianie atrybutów obiektów nie jest tak proste jak
    >w Eclipse z Javą i konwencje m_*, C*, I*, etc. są
    >przydatne. IMO w Javie nie ma to sensu - wciśnięcie
    >jednego klawisza pozwala natychmiast dowiedzieć się, czy
    >dana deklaracja dotyczy interfejsu czy klasy.
    >Zresztą, jak przytoczyłem w 3), oficjalne sunowskie
    >konwencje nie mówią nic o IInterfejsach

    cieszę się, że zrozumiałeś mój zarcik.
    Ale skoro tak się napaliłeś; ) (zwróć tym razem uwagę na powszechnie rozumiany w sieci emotikon z mrugnięciem, mam nadzieję, że się nie obrazisz) :
    VS'owy Intellisens się nie "gubi" :-) w szczególności nie korzysta z przedrostków "I" i "C" - one są dla ludzi :-) Jedno kliknięcie to zawsze więcej niż jedno spojrzenie :-)
  • Scythe

    >bartkiller napisał
    >cieszę się, że zrozumiałeś mój zarcik.
    >Ale skoro tak się napaliłeś; ) (zwróć tym razem uwagę
    >na powszechnie rozumiany w sieci emotikon z mrugnięciem,
    >mam nadzieję, że się nie obrazisz) :

    Spoko, nie obraziłem się. Gdybyś to napisał na serio a potem jeszcze się wykłócał mógłbym, w najgorszym wypadku, uznać Cię za idiotę;P Nie zauważyłem tego uśmieszku, to był długi dzień, a poza tym cośtam się ze spacjami w nim porobiło...

    >VS'owy Intellisens się nie "gubi" :-)

    Gubi gubi. Korzystałem z VS08 C++ i miał poważne problemy z odnajdywaniem pól w klasach nadrzędnych oraz wspomaganiem składni np. bibliotek boosta.

    > w szczególności nie korzysta z przedrostków "I" i "C" - one są dla ludzi :-)
    >Jedno kliknięcie to zawsze więcej niż jedno spojrzenie :-)

    ... niby tak, ale jak dla mnie literka I czy C zawsze była większym kłopotem niż zaletą. Wyszukiwanie (na liście plików wszystkie zaczynają się na C, jakoś dużo trudniej mi wtedy znaleźć to, co chcę) i otwieranie plików (np. ctrl-shift-r w Eclipse - zawsze trzeba zaczynać od C albo *, to jest wkurzające) jest przez to dużo bardziej problematyczne.

    Druga sprawa: programując, przynajmniej mi, nie robi wielkiej różnicy czy korzysta się z Interfejsów czy Klas - tzn. ich obsługa jest dokładnie identyczna jeśli chodzi o wywoływanie metod. Więc byle nazwa była znacząca...

    Swoją drogę pozdrawiam kolegę ze Staszica. Jakoś mi ten msdn od początku nie podpasował, ale mówię, miałem długi dzień. Dlatego pora już spać;)

    Pozdrawiam!
  • bartkiller

    >Scythe napisał
    >>bartkiller napisał
    >>cieszę się, że zrozumiałeś mój zarcik.
    >>Ale skoro tak się napaliłeś; ) (zwróć tym razem
    >uwagę
    >>na powszechnie rozumiany w sieci emotikon z mrugnięciem,
    >>mam nadzieję, że się nie obrazisz) :
    >
    >Spoko, nie obraziłem się. Gdybyś to napisał na serio a
    >potem jeszcze się wykłócał mógłbym, w najgorszym
    >wypadku, uznać Cię za idiotę;P Nie zauważyłem tego
    >uśmieszku, to był długi dzień, a poza tym cośtam się
    >ze spacjami w nim porobiło...
    >
    >>VS'owy Intellisens się nie "gubi" :-)
    >
    >Gubi gubi. Korzystałem z VS08 C++ i miał poważne problemy
    >z odnajdywaniem pól w klasach nadrzędnych oraz
    >wspomaganiem składni np. bibliotek boosta.
    >
    >> w szczególności nie korzysta z przedrostków "I" i "C" -
    >one są dla ludzi :-)
    >>Jedno kliknięcie to zawsze więcej niż jedno spojrzenie
    >:-)
    >
    >... niby tak, ale jak dla mnie literka I czy C zawsze była
    >większym kłopotem niż zaletą. Wyszukiwanie (na liście
    >plików wszystkie zaczynają się na C, jakoś dużo
    >trudniej mi wtedy znaleźć to, co chcę) i otwieranie
    >plików (np. ctrl-shift-r w Eclipse - zawsze trzeba
    >zaczynać od C albo *, to jest wkurzające) jest przez to
    >dużo bardziej problematyczne.
    >
    >Druga sprawa: programując, przynajmniej mi, nie robi
    >wielkiej różnicy czy korzysta się z Interfejsów czy Klas
    >- tzn. ich obsługa jest dokładnie identyczna jeśli chodzi
    >o wywoływanie metod. Więc byle nazwa była znacząca...
    >
    >Swoją drogę pozdrawiam kolegę ze Staszica. Jakoś mi ten
    >msdn od początku nie podpasował, ale mówię, miałem
    >długi dzień. Dlatego pora już spać;)
    >
    >Pozdrawiam!

    :-) Wporzo. Faktycznie jeśli chodzi o C++ to nawet 2008 rzeczywiście miewa problemy (ale też ponoć da się to doprowadzić do porządku). Ale 2010 beta wymiata, nawet z nową składnią dla funkcji lambda nie ma problemów :)
    Też nie jestem fanem I i C - Twoje najświeższe argumenty są słuszne - standardowo przyjąłem pozycję adwersarza; -)

    Też pozdrawiam :-)
  • the_javu

    Ponieważ ja również jestem przekorny:

    http://wiki.eclipse.org/Naming_Conv...

    Wiem, że dotyczy to jednego projektu, ale za to jakiego...
    Osobiście i tak tej konwencji nie lubię i nie stosuję.