1. Kapabilitas
Kanggo luwih ngerti keuntungan saka antarmuka lan ngendi kanggo nggunakake, kita kudu pirembagan bab sawetara liyane abstrak.
Kelas biasane nggawe model obyek tartamtu. Antarmuka kurang cocog karo obyek, lan luwih cocog karo kemampuan utawa perane.

Contone, barang kaya mobil, pit, sepedha motor, lan roda paling apik dituduhake minangka kelas lan obyek. Nanging kabisan - kayata "Aku bisa ditunggangi", "Aku bisa ngeterake wong", "Aku bisa ngadeg" - luwih diwenehi antarmuka. Ing ngisor iki sawetara conto:
Kode | Katrangan |
---|---|
|
Cocog karo kemampuan kanggo mindhah |
|
Cocog karo kemampuan kanggo ditunggangi |
|
Cocog karo kemampuan kanggo ngangkut barang |
|
Kelas Wheel bisa pindhah |
|
Kelas Car bisa obah, ditunggangi, lan ngeterake barang |
|
Kelas Skateboard bisa obah lan ditunggangi |
2. Peran
Antarmuka banget nyederhanakake urip programer. Kerep banget, program duwe ewu obyek, atusan kelas, nanging mung sawetara rolas antarmuka , IE peran . Ana sawetara peran, nanging ana akeh cara kanggo gabungke (kelas).
Intine yaiku sampeyan ora kudu nulis kode ing saben kelas kanggo sesambungan karo saben kelas liyane. Sampeyan mung kudu sesambungan karo peran (antarmuka).
Mbayangno sampeyan minangka pelatih pet. Saben kewan sing sampeyan lakoni bisa duwe sawetara kabisan sing beda. Sampeyan njaluk menyang bantahan grapyak karo pepadhamu bab kang pets bisa nggawe paling rame. Kanggo ngrampungake masalah kasebut, sampeyan mung baris kabeh pets sing bisa "ngomong", lan menehi prentah: Ngomong!
Sampeyan ora preduli apa jenis kewan utawa kabisan liyane. Malah yen padha bisa nindakake triple back somersault. Ing wayahe tartamtu, sampeyan mung kasengsem ing kemampuan kanggo ngomong banter. Mangkene apa sing bakal katon ing kode:
Kode | Katrangan |
---|---|
|
Kapabilitas CanSpeak . Antarmuka iki mangertos printah kanggo speak , tegesé wis cara sing cocog. |
|
Kéwan sing nduweni fitur iki.
Kanggo nggampangake pangerten, kita nyedhiyakake jeneng kelas ing basa Inggris. Iki diijini ing Jawa, nanging banget ora dikarepake.
|
|
Lan kepiye carane menehi prentah? |
Nalika jumlah kelas ing program sampeyan tekan ewonan, sampeyan ora bakal bisa urip tanpa antarmuka. Tinimbang njlèntrèhaké interaksi ewu kelas, iku cukup kanggo njlèntrèhaké interaksi sawetara rolas antarmuka - iki nemen simplifies urip.
Lan yen digabungake karo polimorfisme, pendekatan iki umume sukses banget.
3. default
Implementasi metode antarmuka
Kelas abstrak bisa duwe variabel lan implementasine metode, nanging ora bisa duwe sawetara warisan. Antarmuka ora bisa duwe variabel utawa implementasine metode, nanging bisa duwe sawetara warisan.
Kahanan kasebut dituduhake ing tabel ing ngisor iki:
Kapabilitas / properti | Kelas abstrak | Antarmuka |
---|---|---|
Variabel | ✔ | ✖ |
Implementasi metode | ✔ | ✖ |
Multiple warisan | ✖ | ✔ |
Dadi, sawetara programer pancen pengin antarmuka duwe kemampuan kanggo ngetrapake metode. Nanging duwe kemampuan kanggo nambah implementasine metode ora ateges sing siji bakal tansah ditambahake. Tambah yen sampeyan pengin. Utawa yen ora, banjur aja.
Kajaba iku, masalah karo pirang-pirang warisan utamane amarga variabel. Ing acara apa wae, iku sing diputusake lan ditindakake. Miwiti karo JDK 8, Jawa ngenalake kemampuan kanggo nambah implementasi metode menyang antarmuka.
Mangkene tabel sing dianyari (kanggo JDK 8 lan ndhuwur):
Kapabilitas / properti | Kelas abstrak | Antarmuka |
---|---|---|
Variabel | ✔ | ✖ |
Implementasi metode | ✔ | ✔ |
Multiple warisan | ✖ | ✔ |
Saiki kanggo kelas abstrak uga antarmuka, sampeyan bisa ngumumake metode kanthi utawa tanpa implementasine. Lan iki warta apik banget!
Ing kelas abstrak, metode tanpa implementasine kudu didhisiki karo abstract
tembung kunci. Sampeyan ora perlu nambah apa wae sadurunge metode kanthi implementasine. Ing antarmuka, ngelawan bener. Yen metode ora duwe implementasine, mula ora ana sing kudu ditambahake. Nanging yen ana implementasine, banjur default
tembung kunci kudu ditambahake.
Kanggo gamblang, kita nampilake informasi iki ing tabel cilik ing ngisor iki:
Kapabilitas / properti | Kelas abstrak | Antarmuka |
---|---|---|
Metode tanpa implementasine | abstract |
– |
Metode karo implementasine | – | default |
Masalah
Nggunakake antarmuka sing nduweni cara bisa nyederhanakake hierarki kelas gedhe. Contone, abstrak InputStream
lan OutputStream
kelas bisa diumumake minangka antarmuka! Iki ngidini kita nggunakake luwih asring lan luwih trep.
Nanging wis ana puluhan yuta (miliar?) kelas Jawa ing donya. Lan yen sampeyan miwiti ngganti perpustakaan standar, sampeyan bisa uga ngrusak. Kaya kabeh! 😛
Supaya ora sengaja ngilangi program lan perpustakaan sing wis ana, diputusake yen implementasi metode ing antarmuka bakal duwe precedence warisan sing paling murah .
Contone, yen siji antarmuka marisi antarmuka liyane sing nduweni metode, lan antarmuka pisanan nyatakake cara sing padha nanging tanpa implementasine, banjur implementasi metode saka antarmuka warisan ora bakal tekan antarmuka warisan. Tuladha:
interface Pet
{
default void meow()
{
System.out.println("Meow");
}
}
interface Cat extends Pet
{
void meow(); // Here we override the default implementation by omitting an implementation
}
class Tom implements Cat
{
}
Kode kasebut ora bakal dikompilasi amarga Tom
kelas kasebut ora ngetrapake meow()
metode kasebut.
GO TO FULL VERSION