CodeGym/Java Blog/Acak/Warisan di Jawa
John Squirrels
Level 41
San Francisco

Warisan di Jawa

Dipublikasikan di grup Acak
anggota
Java adalah bahasa berorientasi objek. Artinya segala sesuatu di Java terdiri dari kelas dan objeknya, serta mengikuti paradigma OOP (pemrograman berorientasi objek). Salah satu paradigma tersebut adalah pewarisan, sebuah mekanisme di Java dimana satu kelas diperbolehkan mewarisi fitur (bidang dan metode) dari kelas lain. Sederhananya, di Java, pewarisan berarti membuat kelas baru berdasarkan kelas yang sudah ada. Warisan di Jawa - 1

Pelaku Utama Pewarisan di Pulau Jawa

  • Warisan adalah konsep bahwa suatu kelas dapat mengulangi sebagian atau seluruh properti dan metode induknya (kelas yang diwarisinya).
  • Kelas anak, atau subkelas, atau kelas perluasan, atau kelas turunan adalah kelas yang mewarisi dari kelas lain.
  • Kelas induk, superkelas, atau kelas dasar adalah kelas yang mempunyai sejumlah fungsi, dan fungsi tersebut dapat diteruskan (diwarisi) oleh kelas lain (kelas anak).
  • Penggantian metode mengubah perilaku metode kelas turunan. Ini biasanya merupakan perilaku yang lebih spesifik dan halus. Jika Anda mengganti metode di pewaris yang sudah ada di kelas induk, itu akan menggantikan metode induk.
  • Suatu kelas hanya dapat memiliki satu kelas leluhur, namun setiap kelas dapat memiliki banyak "anak".

Bagaimana itu bekerja

Rantai pewarisan diarahkan dari kelas yang paling abstrak ke kelas yang lebih konkrit. Artinya, superclass adalah yang paling abstrak dalam rangkaian kelas. Seringkali dilambangkan sebagai abstrak (kelas dasar yang tidak memerlukan implementasi). Semua kelas selanjutnya lebih spesifik. Misalnya ada kelas yang bernama “Gadget”. Ini dapat memiliki bidang (atau keadaan) kapasitas baterai bidang “berat”, tingkat pengisian daya lapangan dan metode (atau perilaku) “kerja” dan pengisian daya. Dalam hal ini, metode dapat bersifat abstrak, yaitu tidak memiliki implementasi yang spesifik. Meskipun kami tidak dapat mengatakan jenis gadgetnya, yang pasti ini adalah gadget apa pun yang dapat diisi ulang. Mari kita buat subkelas Telepon dari kelas Gadget. Tidak perlu lagi mendefinisikan ulang bobot dan baterai, cukup mewarisinya dari gadget abstrak. Namun perilaku pekerjaan perlu diklarifikasi. Anda juga dapat menambahkan bidang lain “diagonal layar”, konektor, dan sebagainya. Anda dapat menambahkan metode baru “Perbarui sistem operasi”. Selanjutnya, kita bisa membuat dua kelas lagi dan keduanya akan diwarisi dari Ponsel, Android dan iPhone. Kedua kelas mewarisi semua bidang dan metode Gadget dan Smartphone, dan metode tersebut dapat diganti. Kelas pertama memerlukan kolom "Nama merek", sedangkan iPhone tidak memerlukan kolom ini, karena hanya satu perusahaan yang memproduksi ponsel cerdas tersebut.
class Gadget {}
}
//subclass of Gadget class
class Phone extends Gadget {}
//subclass of Phone class
class IPhone extends Phone {}
//subclass of Phone class
class AndroidPhone extends Phone {}
Kelas anak mewarisi semua anggota kelas induk yang bersifat publik dan dilindungi. Tidak peduli di paket apa subkelasnya berada. Jika kelas anak berada dalam paket yang sama dengan kelas induk, kelas tersebut juga mewarisi anggota paket-pribadi induknya. Anda dapat menggunakan anggota yang diwariskan apa adanya, menggantinya, menyembunyikannya, atau menambahkan anggota baru:
  • Anda dapat menggunakan bidang yang diwarisi secara langsung seperti bidang lainnya.
  • Anda bisa mendeklarasikan field di kelas anak yang memiliki nama yang sama dengan kelas induk. Itu menyembunyikannya (jadi lebih baik tidak melakukannya).
  • Anda dapat mendeklarasikan kolom baru di kelas anak (yang tidak dimiliki kelas induk).
  • Metode yang diwarisi dapat digunakan secara langsung tanpa harus melakukan override pada kelas turunannya.
  • Anda juga dapat menulis metode instance baru di subkelas yang memiliki tanda tangan yang sama dengan metode di kelas induk. Prosedur ini mengesampingkannya.
  • Anda bisa mendeklarasikan metode baru di kelas anak yang tidak dideklarasikan di kelas Induk.
  • Anda dapat menulis konstruktor subkelas yang memanggil konstruktor superkelas baik secara implisit atau dengan kata kunci super.

Contoh

Mari kita buat kelas dasar MusicalInstrument dengan bidang bobot dan merek dagang, serta metode work() . Kami juga mendefinisikan konstruktor.
public class MusicalInstrument {
   int weight;
   String tradeMark;

   public MusicalInstrument(int weight, String tradeMark) {
       this.weight = weight;
       this.tradeMark = tradeMark;
   }

   public void work() {
       System.out.println("the instrument is playing...");
   }
}
Tidak jelas apa jenis alat musik itu dan bagaimana cara memainkannya. Mari kita buat instrumen yang lebih spesifik, biola. Ini akan memiliki bidang yang sama seperti di Alat Musik (mereka akan dipanggil di konstruktor menggunakan kata kunci super. Kita juga dapat mengganti metode kerja dan membuat metode untuk menyetel senar biola demi senar.
public class Violin extends MusicalInstrument {
   String master;
   String owner;
   int age;
   boolean isTuned;

   public Violin(int weight, String tradeMark, String master, String owner, int age, boolean isTuned) {
       super(weight, tradeMark);
       this.master = master;
       this.owner = owner;
       this.age = age;
       this.isTuned = isTuned;
   }

   @Override
   public void work() {
       System.out.println("THe violin's playing");

   }

   public void violinTuning () {
     System.out.println("I'm tuning 1st string...");
     System.out.println("I'm tuning 2nd string...");
     System.out.println("I'm tuning 3rd string...");
     System.out.println("I'm tuning 4th string...");
}


}
Mari kita buat kelas Demo untuk menguji kelas Biola dan melihat dengan tepat cara kerja pewarisan.
public class InheritDemo {

   public static void main(String[] args) {

       Violin violin = new Violin(1, null, "Amati", "Kremer", 285, false);
       violin.violinTuning();
       violin.work();
   }
}
Dalam hal ini, keluaran programnya adalah sebagai berikut:
Aku menyetel senar ke-1... Aku menyetel senar ke-2... Aku menyetel senar ke-3... Aku menyetel senar ke-4... Biola sedang dimainkan
Artinya, jika ada metode yang ditimpa di kelas anak, maka metode leluhur tidak akan dipanggil lagi. Bagaimana jika tidak ada? Artinya, kelas Biola terlihat seperti ini:
public class Violin extends MusicalInstrument {
   String master;
   String owner;
   int age;
   boolean isTuned;

   public Violin(int weight, String tradeMark, String master, String owner, int age, boolean isTuned) {
       super(weight, tradeMark);
       this.master = master;
       this.owner = owner;
       this.age = age;
       this.isTuned = isTuned;
   }

  // @Override


 //  }

   public void violinTuning () {
       System.out.println("I'm tuning 1st string...");
       System.out.println("I'm tuning 2nd string...");
       System.out.println("I'm tuning 3rd string...");
       System.out.println("I'm tuning 4th string...");
   }

}
Outputnya adalah:
Aku menyetel senar ke-1... Aku menyetel senar ke-2... Aku menyetel senar ke-3... Aku menyetel senar ke-4... instrumen sedang dimainkan...
Artinya, metode leluhur akan dipanggil secara otomatis. Omong-omong, kelas anak dapat didefinisikan melalui leluhur, yaitu untuk melakukan upcasting:
Parent parent = new Child()
Inisialisasi ini digunakan untuk mengakses hanya anggota yang ada di kelas induk dan metode yang diganti. Dalam contoh kita, ini akan menjadi:
public class InheritDemo {

   public static void main(String[] args) {

       MusicalInstrument violin = new Violin(1, null, "Amati", "Kremer", 285, false);
       //violin.violinTuning();
       violin.work();
   }
}
Dalam kasus seperti ini, kami tidak dapat mengonfigurasi metode biola. Namun pada saat yang sama, metode work() dari kelas turunan akan dipanggil, jika ada.

Hierarki Kelas Platform Java

Di Java, semuanya terdiri dari kelas-kelas dan semuanya berada di bawah hierarki. Timbul pertanyaan: apakah ada kelas yang mewarisi semua kelas lainnya? Jawabannya iya, memang kelas seperti itu ada. Dan itu hanya disebut Object . Kelas Object dari paket java.lang, mendefinisikan dan mengimplementasikan perilaku umum untuk semua kelas, termasuk yang Anda buat. Dalam platform Java, banyak kelas yang diturunkan langsung dari Object , kelas lain diturunkan dari beberapa kelas tersebut, dan seterusnya, sehingga membentuk hierarki kelas.

Jenis-Jenis Warisan di Pulau Jawa

Mari kita soroti beberapa jenis pewarisan di Java. 1. Warisan Tunggal Tipe ini sama seperti contoh kita di atas, subkelas mewarisi fitur dari satu kelas super. Pada gambar di bawah, kelas A berfungsi sebagai kelas dasar untuk kelas turunan B. 2. Pewarisan Bertingkat Ini hanyalah rangkaian pewarisan, yaitu ada kelas dasar A, kelas B diwarisi darinya, dan kelas C diwarisi dari kelas B. Di Java, suatu kelas tidak dapat mengakses anggota kakek neneknya secara langsung. 3. Pewarisan Hirarki Dalam Warisan Hierarki, satu kelas berfungsi sebagai kelas super (kelas dasar) untuk lebih dari satu subkelas. Di atas, kami memberikan contoh kelas Phone, yang dapat memiliki dua "anak" — AndroidPhone dan IPhone.
class A {
    public void printA() {
System.out.println("A");
 }
}

class B extends A {
    public void printB() {
 System.out.println(" B"); }
}

class C extends A {
    public void printC() {
System.out.println("C");
}
}

class D extends A {
    public void printD() {
System.out.println("D");
 }
}

public class Demo {
    public static void main(String[] args)
    {
        B objB = new B();
        objB.printA();
        objB.printB();

        C objC = new C();
        objC.printA();
        objC.printC();

        D objD = new D();
        objD.printA();
        objD.printD();
    }
}
Outputnya adalah:
A B A C A D
4. Warisan berganda, yaitu kehadiran beberapa leluhur... tapi tunggu dulu, warisan berganda klasik tidak didukung di Java. Sampai batas tertentu, ini dapat diimplementasikan bukan dengan menggunakan kelas, tetapi antarmuka.
interface A {
   public void printA();
}

interface B {
   public void printB();
}

interface C extends A, B {
   public void print();
}
class InheritDemo implements C {
   @Override
   public void print()
   {
       System.out.println("Print something");
   }

   @Override
   public void printA() {
   }

   @Override
   public void printB() {
   }
}
Komentar
  • Populer
  • Baru
  • Lama
Anda harus login untuk memberikan komentar
Halaman ini belum memiliki komentar