Vmesnik (Java)/Pisemska pošiljka

Iz MaFiRaWiki

Denimo, da mora imeti vsaka pisemska pošiljka naslovnika, prejemnika, maso, volumen in metodo, s katero jo odpremo. To opišemo z vmesnikom Posiljka:

  1. public interface Posiljka {
  2. public String posiljatelj();
  3. public String naslovnik();
  4. public double masa();
  5. public double volumen();
  6. public void odpri();
  7. }

Primer objekta, ki zadošča temu vmesniku, je Dopisnica:

  1. public class Dopisnica implements Posiljka {
  2. String besedilo; // kaj se izpise, ko dopisnico odpremo
  3. String naslov; // kam posiljamo
  4. String podpis; // kdo posilja
  5. public Dopisnica(String n, String b, String p) {
  6. naslov = n; besedilo = b; podpis = p;
  7. }
  8. public double volumen() { return 0.10 * 0.15 * 0.001; }
  9. public double masa() { return 0.015; }
  10. public String posiljatelj() { return podpis; }
  11. public String naslovnik() { return naslov; }
  12. public void odpri() {
  13. System.out.println(besedilo + "\n\n" + podpis);
  14. }
  15. }

Pošiljamo lahko tudi bolj nenavadne objekte:

  1. public class Bomba implements Posiljka {
  2. int eksploziv; // kilogramov eksploziva
  3. final double GOSTOTA = 3000;
  4. String naslovnik;
  5. public Bomba(int e) { eksploziv = e; naslovnik = null; }
  6. public void detonator() {
  7. System.out.print("B");
  8. for (int i = 0; i < eksploziv; i++) {
  9. System.out.print("U");
  10. }
  11. System.out.println("M!");
  12. }
  13. public double masa() { return eksploziv; }
  14. public double volumen() { return eksploziv/GOSTOTA; }
  15.  
  16. public void nastavi_naslovnik(String n) {
  17. naslovnik = n;
  18. }
  19. public String naslovnik() { return naslovnik; }
  20. public String posiljatelj() { return "Dedek Mraz"; }
  21. public void odpri() { this.detonator(); }
  22. }

Primeri uporabe (narejeno v Drjava):

 
> Posiljka p1 = new Dopisnica("Kralj Matjaz", "Lep pozdrav iz Turcije", "Lencica");
> p1.odpri()
Lep pozdrav iz Turcije
 
Lencica

> Bomba b = new Bomba(3);
> b.nastavi_naslovnik("Bozicek");
> Posiljka p2 = b;
> p2.odpri()
BUUUM!

Objekt b lahko uporabljamo kot objekt razreda Bomba, objekt p2 pa le kot objekt, ki zadošča vmesniku Posiljka, čeprav gre obakrat za isti objekt:

> b.nastavi_naslovnik("Miklavz");
> p2.nastavi_naslovnik("Sneguljcica");
Error: No 'nastavi_naslovnik' method in 'Posiljka' with arguments: (java.lang.String)
> b.odpri()
BUUUM!
> p2.odpri()
BUUUM!
Osebna orodja