Ez az oldal tartalmazza az Interfészek című fejezethez tartozó példákat.
Comparable
interfész deklarációja
A Comparable interfész deklarációja a
java.lang csomagból.
public interface Comparable { public int compareTo(Object o); }A teljes program: Comparable.java |
Comparable
interfész használata
A Rendez osztály Comparable típusú
elemek tömbjét várja paraméterként és rendezi azokat.
class Rendez { public static void rendez(Comparable[] elemek) { for(int i=0;i < elemek.length;++i) for(int j=i+1;j < elemek.length;++j) if( elemek[i].compareTo(elemek[j]) < 0 ) { Comparable tmp=elemek[i]; elemek[i]=elemek[j]; elemek[j]=tmp; } } }A teljes program: RendezesTeszt.java |
Comparable
interfész megvalósítása
A DatumRendez osztály megvalósítja a Comparable
interfészt dátumok összehasonlítására használva.
class DatumRendez extends java.util.GregorianCalendar implements Comparable { public DatumRendez(int y,int m,int d) { super(y,m,d); } public int compareTo(Object s) { if( s instanceof DatumRendez ) { if( this.before((DatumRendez)s) ) return -1; else if( this.after((DatumRendez)s) ) return 1; else return 0; } else { throw new ClassCastException(s.toString()); } } public String toString() { return get(YEAR)+":"+get(MONTH)+":"+get(DAY_OF_MONTH); } }A teljes program: RendezesTeszt.java |
DatumRendez
osztály felhasználása
A RendezesTeszt osztály DatumRendez
típusú objektumokat használ fel a rendezésben.
public class RendezesTeszt { public static void main(String args[]) { DatumRendez[] is=new DatumRendez[4]; is[0]=new DatumRendez(74,3,30); is[1]=new DatumRendez(97,2,6); is[2]=new DatumRendez(96,11,24); is[3]=new DatumRendez(84,0,1); try { Rendez.rendez(is); } catch(ClassCastException ce) { System.out.println("Nem megfelelô típus a rendezéshez: " + ce); } for(int i=0;i < is.length;++i) System.out.println(is[i]); } }A teljes program: RendezesTeszt.java |
Egy üres interfész, illetve egy konstanst és egy absztrakt
metódust tartalmazó interfész deklarációja.
interface Savanyú { } public interface Gyumolcs { int ÍZ = 1; void egyedMeg(); }A teljes program: Gyumolcs.java |
A korábban definiált interész kiterjesztése.
interface Alma extends Gyumolcs { int SZÍN = 2; int milyenSzínű(); }A teljes program: interfesz1.java |
A Narancs interfész leszármazottja a
Gyumolcs és a Savanyú interfészeknek is.
interface Narancs extends Gyumolcs, Savanyú { int MÉRET = 1; }A teljes program: interfesz2.java |
Az itt definiált interfészek nem csak az extends kulcsszó
mögött álló interfészeket terjesztik ki, hanem azok őseit is.
interface Jonatan extends Alma { } interface Starking extends Alma { } interface VérNarancs extends Narancs { }A teljes program: interfesz3.java |
A Golden az Alma interfésszel együtt
annak őseit is implementálja.
class Golden implements Alma { public void egyedMeg() { /*...*/ } public int milyenSzínű() { /*...*/ } //... }A teljes program: interfesz4.java |
Konstansok deklarációja a szükséges kezdeti értékadással.
interface Alma { boolean B = false; char []C = {'j','o','n','a','t','a','n'}; int I = 1; }A teljes program: interfesz5.java |
A konstans kezdeti értékének egy már ismert értéknek kell lennie.
interface Alma { float F = J; //hibás!!! int J = 1; float H = J; int K = K+1; //hibás!!! }A teljes program: interfesz6.java |
Az Alma interfész FAJTÁK konstansa
elfedi a Gyumolcs FAJTÁK konstansát.
interface Gyumolcs { int FAJTÁK = 10; } interface Alma extends Gyumolcs { int FAJTÁK = 6; }A teljes program: interfesz7.java |
A KedvencGyumolcs több úton örökli a
NARANCS konstansot, amire
hivatkozva fordítási hiba lép fel.
interface Gyumolcs { int ALMA = 1, KÖRTE = 2, BARACK = 3; } interface DeliGyumolcs extends Gyumolcs { int BANÁN = 4, NARANCS = 5; } interface KerekGyumolcs extends Gyumolcs { int NARANCS = 8, DINNYE = 16; } interface KedvencGyumolcs extends DeliGyumolcs, KerekGyumolcs { int SZILVA = 10; }A teljes program: interfesz8.java |
Példa egyszerű metódusdeklarációra.
interface Alma { void egyedMeg(int i,boolean b); int mosdMeg(char c) throws Exception; }A teljes program: interfesz9.java |
A Gyumolcs interfész által deklarált egyedMeg metódus átdefiniálja az
Alma és a Korte hasonló paraméterekkel
rendelkező metódusait, de a Korte int -et tartalmazó és
ezért eltérő szignatúrájú metódusát örökli.
interface Alma { void egyedMeg(boolean bx, boolean by) throws Exception; } interface Korte { void egyedMeg(boolean bx, boolean by) throws Exception; void egyedMeg(boolean bx, int iy); } interface Gyumolcs extends Alma, Korte { void egyedMeg(boolean cx, boolean cy) throws Exception; }A teljes program: interfesz10.java |
A Gyumolcs interfész által kiterjesztett Alma és Korte
interfészekből a két egyedMeg metódus helyesen öröklődik. Ha valamelyik
visszatérési típus megváltozna, az fordítási hibát okozna.
interface Alma { void egyedMeg(boolean bx, boolean by); } interface Korte { void egyedMeg(boolean bx, boolean by) throws Exception; } interface Gyumolcs extends Alma, Korte { }A teljes program: interfesz11.java |
A Jonatan interfésznek három egyedMeg metódusa
lesz, de az eltérő szignatúra miatt a metódusok különböznek.
interface Alma { void egyedMeg(boolean bx, boolean by); } interface Jonatan extends Alma { void egyedMeg(char cx, char cy) throws Exception; int egyedMeg(int ix, int iy); }A teljes program: interfesz12.java |
Interfészek használatának elemei a következők: interfész
deklarálása, implementálása, interfész használata deklarációban,
és egy implementáló osztálybeli objektum felhasználása a deklaráció helyén.
interface Gyumolcs { void egyedMeg(int i); } interface Alma extends Gyumolcs{ int színe(); void színÁllít(int i); } interface Korte { int mérete(); void méretÁllít(int i); } class Jonatan implements Alma { int szín; public void színÁllít(int i) { szín=i; } public int színe() { return szín; } public void egyedMeg(int i) { System.out.println("Finom volt"); } } class VilmosKorte implements Korte { int méret; public void méretÁllít(int i) { méret=i; } public int mérete() { return méret; } } public class Teszt { public static void main(String args[]){ Alma b; b=new Jonatan(); b.színÁllít(5); System.out.println(b.színe()); b.egyedMeg(3); } }A teljes program: Teszt.java |