CodeGym /Blog Jawa /Acak /Polimorfisme Jawa
John Squirrels
tingkat
San Francisco

Polimorfisme Jawa

Diterbitake ing grup
Pitakonan sing gegandhengan karo OOP minangka bagean integral saka wawancara teknis kanggo posisi pangembang Jawa ing perusahaan IT. Ing artikel iki, kita bakal ngomong babagan siji prinsip OOP - polimorfisme. Kita bakal fokus ing aspek sing asring ditakoni sajrone wawancara, lan uga menehi sawetara conto supaya luwih jelas.

Apa polimorfisme ing basa Jawa?

Polimorfisme minangka kemampuan program kanggo nambani obyek kanthi antarmuka sing padha kanthi cara sing padha, tanpa informasi babagan jinis tartamtu obyek kasebut. Yen sampeyan mangsuli pitakon babagan apa polimorfisme, sampeyan bakal dijaluk nerangake apa sing dimaksud. Tanpa nimbulake pitakon tambahan, pasangake kabeh kanggo pewawancara maneh. Wektu wawancara: polimorfisme ing basa Jawa - 1Sampeyan bisa miwiti karo kasunyatan sing pendekatan OOP melu mbangun program Jawa adhedhasar interaksi antarane obyek, kang adhedhasar kelas. Kelas sing sadurunge ditulis blueprints (templates) digunakake kanggo nggawe obyek ing program. Kajaba iku, kelas mesthi duwe jinis tartamtu, sing, kanthi gaya pemrograman sing apik, duwe jeneng sing nuduhake tujuane. Salajengipun, bisa dicathet menawa wiwit Jawa diketik banget, kode program kudu tansah nemtokake jinis obyek nalika variabel diumumake. Tambah iki kasunyatan sing ngetik ketat mbenakake keamanan kode lan linuwih, lan ndadekake iku bisa, malah ing kompilasi, kanggo nyegah kasalahan amarga jinis incompatibility (contone, nyoba kanggo dibagi senar dening nomer). Mesthine, kompiler kudu "ngerti" jinis sing diumumake - bisa dadi kelas saka JDK utawa sing digawe dhewe. Tuduhake marang pewawancara yen kode kita bisa nggunakake ora mung obyek saka jinis sing dituduhake ing deklarasi nanging uga turunane.Iki minangka titik penting: kita bisa nggarap macem-macem jinis minangka jinis siji (yen jinis iki asalé saka jinis dhasar). Iki uga tegese yen kita ngumumake variabel sing jinis superclass, mula kita bisa nemtokake conto salah sawijining turunane menyang variabel kasebut. Pewawancara bakal seneng yen sampeyan menehi conto. Pilih sawetara kelas sing bisa dienggo bareng dening (kelas dhasar kanggo) sawetara kelas lan nggawe saperangan saka wong-wong mau oleh warisan. Kelas dhasar:

public class Dancer {
    private String name;
    private int age;

    public Dancer(String name, int age) {
        this.name = name;
        this.age = age;
    }

    public void dance() {
        System.out.println(toString() + " I dance like everyone else.");
    }

    @Override
    public String toString() {
        Return "I'm " + name + ". I'm " + age + " years old.";
    }
}
Ing subkelas, ganti metode kelas dasar:

public class ElectricBoogieDancer extends Dancer {
    public ElectricBoogieDancer(String name, int age) {
        super(name, age);
    }
// Override the method of the base class
    @Override
    public void dance() {
        System.out.println(toString () + " I dance the electric boogie!");
    }
}

public class Breakdancer extends Dancer {

    public Breakdancer(String name, int age) {
        super(name, age);
    }
// Override the method of the base class
    @Override
    public void dance() {
        System.out.println(toString() + " I breakdance!");
    }
}
Conto polimorfisme lan carane obyek kasebut bisa digunakake ing program:

public class Main {

    public static void main(String[] args) {
        Dancer dancer = new Dancer("Fred", 18);

        Dancer breakdancer = new Breakdancer("Jay", 19); // Widening conversion to the base type 
        Dancer electricBoogieDancer = new ElectricBoogieDancer("Marcia", 20); // Widening conversion to the base type

        List<dancer> disco = Arrays.asList(dancer, breakdancer, electricBoogieDancer);
        for (Dancer d : disco) {
            d.dance(); // Call the polymorphic method
        }
    }
}
Ing cara utama , nuduhake yen garis

Dancer breakdancer = new Breakdancer("Jay", 19);
Dancer electricBoogieDancer = new ElectricBoogieDancer("Marcia", 20);
mratelakake variabel saka superclass lan nemtokake obyek sing minangka conto saka salah sawijining turunane. Sampeyan bakal paling kamungkinan bakal takon kok compiler ora loncat karo muter awak ing inconsistency saka jinis ngumumaké ing sisih kiwa lan tengen operator assignment - sawise kabeh, Jawa diketik banget. Nerangake yen konversi jinis widening ana ing kene - referensi kanggo obyek dianggep kaya referensi kanggo kelas dhasar. Apa maneh, sawise nemokake konstruksi kasebut ing kode kasebut, kompiler nindakake konversi kanthi otomatis lan implisit. Kode sampel nuduhake yen jinis sing diumumake ing sisih kiwa operator penugasan ( Penari ) nduweni pirang-pirang wujud (jinis), sing diumumake ing sisih tengen ( Breakdancer , ElectricBoogieDancer). Saben wangun bisa duwe prilaku unik dhewe babagan fungsi umum sing ditetepake ing superclass ( cara tari ). Yaiku, metode sing diumumake ing superclass bisa ditindakake kanthi beda ing turunane. Ing kasus iki, kita ngatasi metode overriding, yaiku sing nggawe macem-macem wujud (prilaku). Iki bisa dideleng kanthi mbukak kode ing cara utama: Output program: Aku Fred. Aku 18 taun. Aku nari kaya wong liya. Aku Jay. Aku 19 taun. Aku breakdance! Aku Marcia. Aku 20 taun. Aku nari boogie listrik! Yen kita ora ngilangi metode ing subclass, mula kita ora bakal entuk prilaku sing beda. Tuladhane,ElectricBoogieDancer kelas, banjur output saka program bakal iki: Aku Fred. Aku 18 taun. Aku nari kaya wong liya. Aku Jay. Aku 19 taun. Aku nari kaya wong liya. Aku Marcia. Aku 20 taun. Aku nari kaya wong liya. Lan iki tegese ora ana gunane nggawe kelas Breakdancer lan ElectricBoogieDancer . Ngendi khususe prinsip polimorfisme nyata? Endi obyek sing digunakake ing program tanpa kawruh babagan jinis tartamtu? Ing conto kita, mengkono nalika tari () cara disebut ing obyek Dancer d . Ing Jawa, polimorfisme tegese program ora perlu ngerti apa obyek iku aBreakdancer utawa ElectricBoogieDancer . Sing penting iku keturunan saka kelas Penari . Lan yen sampeyan nyebutake turunan, sampeyan kudu ngelingi yen warisan ing Jawa ora mung ngluwihi , nanging uga ngetrapake.. Saiki wektune kanggo nyebutake yen Jawa ora ndhukung warisan pirang-pirang - saben jinis bisa duwe siji induk (superclass) lan nomer turunan sing ora winates (subclass). Patut, antarmuka digunakake kanggo nambah sawetara set fungsi kanggo kelas. Dibandhingake karo subclasses (warisan), antarmuka kurang ditambah karo kelas induk. Padha digunakake banget wiyar. Ing Jawa, antarmuka minangka jinis referensi, mula program kasebut bisa ngumumake variabel saka jinis antarmuka. Saiki wektune menehi conto. Nggawe antarmuka:

public interface CanSwim {
    void swim();
}
Kanggo gamblang, kita bakal njupuk macem-macem kelas sing ora ana hubungane lan nggawe dheweke ngleksanakake antarmuka:

public class Human implements CanSwim {
    private String name;
    private int age;

    public Human(String name, int age) {
        this.name = name;
        this.age = age;
    }

    @Override
    public void swim() {
        System.out.println(toString()+" I swim with an inflated tube.");
    }

    @Override
    public String toString() {
        return "I'm " + name + ". I'm " + age + " years old.";
    }

}
 
public class Fish implements CanSwim {
    private String name;

    public Fish(String name) {
        this.name = name;
    }

    @Override
    public void swim() {
        System.out.println("I'm a fish. My name is " + name + ". I swim by moving my fins.");

    }

public class UBoat implements CanSwim {

    private int speed;

    public UBoat(int speed) {
        this.speed = speed;
    }

    @Override
    public void swim() {
        System.out.println("I'm a submarine that swims through the water by rotating screw propellers. My speed is " + speed + " knots.");
    }
}
metode utama :

public class Main {

    public static void main(String[] args) {
        CanSwim human = new Human("John", 6);
        CanSwim fish = new Fish("Whale");
        CanSwim boat = new UBoat(25);

        List<swim> swimmers = Arrays.asList(human, fish, boat);
        for (Swim s : swimmers) {
            s.swim();
        }
    }
}
Asil nelpon cara polymorphic ditetepake ing antarmuka nuduhake kita beda ing prilaku jinis sing ngleksanakake antarmuka iki. Ing kasus kita, iki minangka senar beda sing ditampilake kanthi cara nglangi . Sawise sinau conto kita, interviewer bisa takon kok mbukak kode iki ing cara utama

for (Swim s : swimmers) {
            s.swim();        
}
nyebabake metode overriding sing ditetepake ing subkelas kita diarani? Kepiye cara implementasine sing dikarepake dipilih nalika program mlaku? Kanggo njawab pitakonan iki, sampeyan kudu nerangake pungkasan (dinamis) naleni. Binding tegese nggawe pemetaan antarane panggilan metode lan implementasi kelas tartamtu. Intine, kode kasebut nemtokake endi saka telung cara sing ditetepake ing kelas kasebut bakal dieksekusi. Jawa nggunakake pungkasan naleni minangka standar, IE naleni mengkono ing runtime lan ora ing wektu kompilasi minangka kasus karo awal naleni. Iki tegese nalika compiler nyusun kode iki

for (Swim s : swimmers) {
            s.swim();        
}
ora ngerti kelas endi ( Manusia , Iwak , utawa Uboat ) duwe kode sing bakal dieksekusi nalika nglangi .metode diarani. Iki ditemtokake mung nalika program wis kaleksanan, thanks kanggo mekanisme naleni dinamis (mriksa jinis obyek ing runtime lan milih implementasine bener kanggo jinis iki). Yen sampeyan takon carane iki dileksanakake, sampeyan bisa njawab sing nalika loading lan initializing obyek, JVM mbangun tabel ing memori lan pranala variabel karo nilai lan obyek karo cara. Kanthi mengkono, yen kelas diwarisake utawa ngleksanakake antarmuka, urutan bisnis pisanan yaiku mriksa anané metode sing ditindhes. Yen ana, padha kaiket ing jinis iki. Yen ora, telusuran cara sing cocog pindhah menyang kelas sing siji langkah luwih dhuwur (wong tuwa) lan sateruse nganti oyod ing hirarki multilevel. Nalika nerangake polimorfisme ing OOP lan implementasine ing kode, kita Wigati sing iku laku apik nggunakake kelas abstrak lan antarmuka kanggo nyedhiyani definisi abstrak kelas dhasar. Praktek iki nderek saka prinsip abstraksi - ngenali prilaku lan sifat umum lan dilebokake ing kelas abstrak, utawa mung ngenali prilaku umum lan dilebokake ing antarmuka. Ngrancang lan nggawe hirarki obyek adhedhasar antarmuka lan warisan kelas dibutuhake kanggo ngleksanakake polimorfisme. Babagan polimorfisme lan inovasi ing Jawa, kita nyathet yen diwiwiti karo Java 8, nalika nggawe kelas abstrak lan antarmuka bisa nggunakake utawa ngenali mung prilaku umum lan sijine iku ing antarmuka. Ngrancang lan nggawe hirarki obyek adhedhasar antarmuka lan warisan kelas dibutuhake kanggo ngleksanakake polimorfisme. Babagan polimorfisme lan inovasi ing Jawa, kita nyathet yen diwiwiti karo Java 8, nalika nggawe kelas abstrak lan antarmuka bisa nggunakake utawa ngenali mung prilaku umum lan sijine iku ing antarmuka. Ngrancang lan nggawe hirarki obyek adhedhasar antarmuka lan warisan kelas dibutuhake kanggo ngleksanakake polimorfisme. Babagan polimorfisme lan inovasi ing Jawa, kita nyathet yen diwiwiti karo Java 8, nalika nggawe kelas abstrak lan antarmuka bisa nggunakaketembung kunci standar kanggo nulis implementasi standar kanggo metode abstrak ing kelas dhasar. Tuladhane:

public interface CanSwim {
    default void swim() {
        System.out.println("I just swim");
    }
}
Kadhangkala pewawancara takon babagan carane metode ing kelas dhasar kudu diumumake supaya prinsip polimorfisme ora dilanggar. Jawaban iki prasaja: cara iki ora kudu statis , pribadi utawa final . Pribadi nggawe cara mung kasedhiya ing kelas, supaya sampeyan ora bisa ngganti ing subclass. Statis nggandhengake metode karo kelas tinimbang obyek apa wae, mula metode superclass bakal diarani. Lan final ndadekake cara immutable lan didhelikake saka subclasses.

Apa polymorphism menehi kita?

Sampeyan uga bakal ditakoni babagan kepiye polimorfisme entuk manfaat kanggo kita. Sampeyan bisa mangsuli iki kanthi sedhela tanpa macet ing rincian wulu:
  1. Iku ndadekake iku bisa kanggo ngganti implementasine kelas. Testing dibangun ing.
  2. Iku nggampangake extensibility, nggawe luwih gampang kanggo nggawe pondasi sing bisa dibangun ing mangsa ngarep. Nambahake jinis anyar adhedhasar sing wis ana minangka cara sing paling umum kanggo nggedhekake fungsi program OOP.
  3. Ngidini sampeyan nggabungake obyek sing nuduhake jinis utawa prilaku sing umum dadi siji koleksi utawa susunan lan nangani kanthi seragam (kaya ing conto, ing ngendi kita meksa kabeh wong nari () utawa nglangi () :)
  4. Fleksibilitas ing nggawe jinis anyar: sampeyan bisa milih kanggo implementasine wong tuwa saka cara utawa override ing subclass.

Sawetara tembung perpisahan

Polimorfisme minangka topik sing penting banget lan ekstensif. Iki minangka subyek saka meh setengah artikel iki babagan OOP ing Jawa lan dadi bagean sing apik saka dhasar basa kasebut. Sampeyan ora bakal bisa nyingkiri netepake prinsip iki ing wawancara. Yen sampeyan ora ngerti utawa ora ngerti, wawancara mesthi bakal rampung. Dadi aja dadi slacker - evaluasi kawruh sadurunge wawancara lan refresh yen perlu.
Komentar
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION