Hirdetés

Keresés

Új hozzászólás Aktív témák

  • modder

    aktív tag

    válasz Dave-11 #3239 üzenetére

    Ha már a könyvben szó esett arról, hogy "az osztály implementálja az x interfészt", akkor gyanítom, hogy egy valós példa is szerepel az interfész alkalmazására.

    Többek között azért jó egy interfész, mert elrejti az osztály konkrét implementációját (fordítási időben).

    Egy egyszerű példa a Swing ActionListener interfész amit arra használhatsz, hogy gui eseményekre (pl. gomb megnyomása) valamit reagáljon a programod.
    A GUI komponens .addActionListener( ActionListener listener ) metódusának egy olyan objektumra van szüksége, aminek van actionPerformed( ActionEvent e ) metódusa. Tehát létrehoztak neki egy interfészt, amiben deklarálták ezt a metódust, ez lett az ActionListener interfész. Ezzel kényszerítik ki, hogy csak olyan objektumot adjál át ennek a metódusnak, aminek megvan a megfelelő actionPerformed( ActionEvent e ) metódusa.

    Vissza a fordítási időhöz: Látható, hogy a Swing készítőket nem érdekli, hogy miután lefordították a Swing library-t milyen ActionListener objektumokat fog létrehozni a fejlesztő, lehet azoknak az objektumoknak hatszáz másik metódusa is, és mindegy, hogy mit csinál. Ami a fontos, hogy a fejlesztő által létrehozott listener objektumoknak meglesz az elvárható tulajdonsága: lesz neki actionPerformed( ActionEvent e ) metódusa.

    [ Szerkesztve ]

  • Davs

    tag

    válasz Dave-11 #3239 üzenetére

    Egy intefesz csak definialja a metodusok neveit. Ha az osztalyod implementalja az interfesz, akkor az osztalynak definialnia kell MINDEN metodust, ami az interfeszben volt. Ahogy az elottel szolo peldajaban is latod, a MyService interfeszben csak a metodusok neve van definialva. A MyServiceImpl osztaly implementalja a MyService interfeszt, ezert implementalnia kell a get/setSomething metodusokat.

    Ez ez egesz iterfeszes dolog pl arra jo, hogy ellenorizni tudod, hogy egy osztaly implementalja-e az adott interfeszt, es ha igen, akkor biztosan tudod, hogy az osztaly tartalmazza az interfeszben definialt metodusokat stb.

  • TBG

    senior tag

    válasz Dave-11 #3239 üzenetére

    Pár szó akkor.

    Interfész:

    public interface MyService {

    public void setSomething();
    public String getSomething();

    }

    public class MyServiceImpl implements MyService {

    @Override
    public void setSomething(String something) {
    // Do something...
    }
    @Override
    public String getSomething() {
    return "Some String";
    }
    public void setFoo(String foo) {
    // Do anything else...
    }

    }

    public class Something {

    public static void main(String[] args) {

    // Ebben az esetben csak azokat a metódusokat látod, amiket a MyService interfész deklarál....
    MyService myService = new MyServiceImpl();
    myService.setSomething("Hehe");
    String something = myService.getSomething();

    // Ebben az esetben látod az interfész által deklarált metódusokat és az egyebeket is.
    MyServiceImpl myServiceImpl = new MyServiceImpl();
    myServiceImpl.setSomething("Hehe");
    String something = myServiceImpl.getSomething();
    myServiceImpl.setFoo("Foo");

    // Röviden...

    }

    }

    [ Szerkesztve ]

    ZTE Grand X powered by Intel® Atom™, Eladó: Panasonic HC-V10 HD+16GB SD kártya 25K.

  • MrSealRD

    veterán

    válasz Dave-11 #3239 üzenetére

    Türelem...Olvass tovább és akkor tiszta lesz. Nem véletlen nem tart még ott a könyv, hogy ezt tárgyalja.

    Mondja, Mr. Babbage, ha rossz adatokat ad meg a gépnek, akkor is jó válasz fog kijönni belőle?" Képtelen vagyok felfogni azt az értelmi zavart, ami valakit egy ilyen kérdés feltevésére késztethet. - by Charles Babbage

Új hozzászólás Aktív témák

Hirdetés