1. Ngenalke antarmuka
Dina iki dina kanggo kawruh. Topik anyar lan menarik liyane yaiku antarmuka.
Konsep antarmuka minangka anak saka prinsip abstraksi lan polimorfisme. Antarmuka meh padha karo kelas abstrak, sing kabeh metode abstrak. Diumumake kanthi cara sing padha karo kelas, nanging kita nggunakake tembung interface
kunci.
interface Feline
{
void purr();
void meow();
void growl();
}
Ing ngisor iki sawetara fakta migunani babagan antarmuka:
1. Pranyatan antarmuka
interface Drawable
{
void draw();
}
interface HasValue
{
int getValue();
}
- Tinimbang
class
tembung kunci, kita nulisinterface
. - Isine mung cara abstrak (aja nulis
abstract
tembung kunci) - Nyatane, antarmuka duwe kabeh
public
cara
Antarmuka mung bisa warisan antarmuka. Nanging antarmuka bisa duwe akeh tuwane. Cara liya kanggo ngomong iki yaiku yen Jawa nduweni warisan antarmuka. Tuladha:
interface Piece extends Drawable, HasValue
{
int getX();
int getY();
}
3. Warisan kelas saka antarmuka
A kelas bisa oleh warisan sawetara antarmuka (mung saka siji kelas). Iki rampung nggunakake implements
tembung kunci. Tuladha:
abstract class ChessItem implements Drawable, HasValue
{
private int x, y, value;
public int getValue()
{
return value;
}
public int getX()
{
return x;
}
public int getY()
{
return y;
}
}
Kelas ChessItem diumumake abstrak: iki ngetrapake kabeh metode sing diwarisake kajaba draw
. Ing tembung liyane, ChessItem
kelas ngandhut siji cara abstrak - draw()
.
Makna teknis extends
lan implements
tembung kunci padha: loro-lorone minangka warisan. Bedane digawe kanggo nambah keterbacaan kode. Kita uga ujar manawa kelas diwarisake (liwat extends
) lan antarmuka ditindakake (liwat implements
)
4. Variabel
Mangkene sing paling penting: variabel biasa ora bisa diumumake ing antarmuka (sanajan bisa uga statis).
Nanging kenapa kita butuh antarmuka? Nalika padha digunakake? Antarmuka duwe rong kaluwihan sing kuat tinimbang kelas:
2. Misahake "deskripsi metode" saka implementasine.
Sadurunge, kita ujar manawa sampeyan pengin ngidini metode kelas sampeyan diarani saka kelas liyane, mula metode sampeyan kudu ditandhani nganggo tembung public
kunci. Yen sampeyan pengin sawetara cara kasebut mung diarani saka kelas sampeyan, sampeyan kudu menehi tandha nganggo tembung private
kunci. Ing tembung liyane, kita dibagi metode kelas dadi rong kategori: "kanggo kabeh wong kanggo nggunakake" lan "mung kanggo nggunakake kita dhewe".
Antarmuka mbantu ngiyataken divisi iki luwih. Kita bakal nggawe "kelas kanggo kabeh wong nggunakake" khusus uga kelas kapindho "mung kanggo kita dhewe", kang bakal oleh warisan kelas pisanan. Mangkene kira-kira bakal katon:
sadurunge | Sawise |
---|---|
|
|
|
|
Kita pamisah kelas kita dadi loro: antarmuka lan kelas sing marisi antarmuka . Lan apa kauntungan ing kene?
Akeh kelas beda bisa ngleksanakake (marisi) antarmuka sing padha. Lan saben wong bisa duwe prilaku dhewe. Contone, ArrayList
LinkedList
ana rong implementasi antarmuka sing beda List
.
Mangkono, kita ndhelikake ora mung macem-macem implementasine, nanging uga kelas implementasine dhewe (amarga kita mung butuh antarmuka ing kode kasebut). Iki ngidini kita dadi banget fleksibel: tengen minangka program mlaku, kita bisa ngganti siji obyek karo liyane, ngganti prilaku obyek tanpa mengaruhi kabeh kelas sing nggunakake.
Iki minangka teknik sing kuat banget yen digabungake karo polimorfisme. Saiki, ora jelas kenapa sampeyan kudu nindakake iki. Sampeyan kudu nemoni program kanthi puluhan utawa atusan kelas supaya ngerti manawa antarmuka bisa nggawe urip luwih gampang tinimbang tanpa.
3. Pusaka pirang-pirang
Ing Jawa, kabeh kelas mung bisa duwe siji kelas induk. Ing basa pamrograman liyane, kelas asring duwe sawetara kelas induk. Iki trep banget, nanging uga nggawa akeh masalah.
Pencipta Jawa teka ing kompromi: padha nglarang warisan pirang-pirang kelas, nanging ngidini sawetara warisan antarmuka. Antarmuka bisa duwe sawetara antarmuka induk. Kelas bisa duwe sawetara antarmuka induk nanging mung siji kelas induk.
Napa dheweke nglarang sawetara warisan kelas nanging ngidini macem-macem warisan antarmuka? Amarga sing diarani masalah warisan berlian:
Nalika kelas B marisi kelas A, ora ngerti apa-apa babagan kelas C lan D. Dadi nggunakake variabel kelas A kaya sing dikarepake. Kelas C nindakake perkara sing padha: nggunakake variabel kelas A, nanging kanthi cara sing beda. Lan kabeh iki nyebabake konflik ing kelas D.
Ayo deleng conto prasaja ing ngisor iki. Ayo kita duwe 3 kelas:
class Data
{
protected int value;
}
class XCoordinate extends Data
{
public void setX (int x) { value = x;}
public int getX () { return value;}
}
class YCoordinate extends Data
{
public void setY (int y) { value = y;}
public int getY () { return value; }
}
Kelas Data nyimpen value
variabel. Kelas turunan XCoordinate nggunakake variabel kasebut kanggo nyimpen x
nilai kasebut, lan YCoordinate
kelas turunan nggunakake kanggo nyimpen y
nilai kasebut.
Lan kerjane. Kapisah. Nanging yen kita pengin kelas XYCoordinates kanggo warisan loro XCoordinate
lan YCoordinate
kelas, banjur kita njaluk kode rusak. Kelas iki bakal duwe metode kelas leluhur, nanging ora bakal bisa digunakake kanthi bener, amarga padha duwe value variable
.
Nanging amarga antarmuka ora bisa duwe variabel, ora bisa duwe konflik kaya iki. Patut, macem-macem warisan antarmuka diijini.
GO TO FULL VERSION