CodeGym /Blog Java /rawak /Warisan di Jawa
John Squirrels
Tahap
San Francisco

Warisan di Jawa

Diterbitkan dalam kumpulan
Java ialah bahasa berorientasikan objek. Ini bermakna segala-galanya dalam Java terdiri daripada kelas dan objeknya, dan mematuhi paradigma OOP (pengaturcaraan berorientasikan objek). Salah satu paradigma tersebut ialah warisan, satu mekanisme di Jawa di mana satu kelas dibenarkan untuk mewarisi ciri (medan dan kaedah) kelas lain. Ringkasnya, dalam Java, warisan bermaksud mencipta kelas baharu berdasarkan kelas sedia ada. Warisan di Jawa - 1

Pelakon Utama Pewarisan di Jawa

  • Warisan ialah konsep bahawa kelas boleh mengulang sebahagian atau sepenuhnya sifat dan kaedah induknya (kelas dari mana ia mewarisi).
  • Kelas kanak-kanak, atau subkelas, atau kelas lanjutan, atau kelas terbitan ialah kelas yang mewarisi daripada kelas lain.
  • Kelas induk, superclass atau kelas asas ialah kelas yang mempunyai beberapa fungsi, dan fungsi ini boleh diluluskan (diwarisi) oleh kelas lain (kelas anak).
  • Penggantian kaedah ialah mengubah tingkah laku kaedah kelas terbitan. Ini biasanya lebih khusus, tingkah laku yang diperhalusi. Jika anda mengatasi kaedah dalam pewaris yang sudah berada dalam kelas induk, ia semacam menggantikan kaedah induk.
  • Satu kelas boleh mempunyai hanya satu kelas nenek moyang, tetapi setiap kelas boleh mempunyai ramai "anak".

Bagaimana ia berfungsi

Rantaian warisan diarahkan dari kelas yang paling abstrak kepada yang lebih konkrit. Iaitu, superclass adalah yang paling abstrak dalam rantaian kelas. Selalunya ia dilambangkan sebagai abstrak (kelas asas yang tidak memerlukan pelaksanaan). Semua kelas selanjutnya adalah lebih khusus. Sebagai contoh, terdapat kelas yang dipanggil "Alat". Ia boleh mempunyai kapasiti bateri medan "berat" medan (atau nyatakan), aras caj medan dan kaedah (atau tingkah laku) "berfungsi" dan mengecas. Dalam kes ini, kaedah boleh menjadi abstrak, iaitu, mereka tidak mempunyai pelaksanaan tertentu. Walaupun kita tidak dapat menyatakan jenis alat itu, ia adalah alat yang boleh dicas semula. Mari buat subkelas Telefon bagi kelas Alat. Ia tidak lagi perlu mentakrifkan semula berat dan bateri, ia hanya mewarisinya daripada alat abstrak. Tetapi tingkah laku kerja itu perlu dijelaskan. Anda juga boleh menambah medan lain "pepenjuru skrin", penyambung dan sebagainya. Anda boleh menambah kaedah baharu "Kemas kini sistem pengendalian". Seterusnya, kita boleh membuat dua lagi kelas dan kedua-duanya akan diwarisi daripada Telefon, Android dan iPhone. Kedua-dua kelas mewarisi semua medan dan kaedah Alat dan Telefon Pintar, dan kaedah boleh ditindih. Kelas pertama memerlukan medan "Nama jenama", manakala iPhone tidak memerlukan medan ini, kerana hanya satu syarikat yang menghasilkan telefon pintar sedemikian.
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 kanak-kanak mewarisi semua ahli awam dan dilindungi kelas induk. Tidak kira dalam pakej apa subkelas itu. Jika kelas anak berada dalam pakej yang sama dengan kelas induk, ia juga mewarisi ahli pakej peribadi ibu bapa. Anda boleh menggunakan ahli yang diwarisi sebagaimana adanya, menggantikan mereka, menyembunyikannya atau menambah ahli baharu:
  • Anda boleh menggunakan medan Warisan secara langsung seperti mana-mana medan lain.
  • Anda boleh mengisytiharkan medan dalam kelas anak yang mempunyai nama yang sama seperti dalam kelas induk. Ia menyembunyikannya (jadi lebih baik tidak melakukannya).
  • Anda boleh mengisytiharkan medan baharu dalam kelas anak (yang tidak dimiliki oleh kelas induk).
  • Kaedah yang diwarisi boleh digunakan secara langsung tanpa mengatasi dalam kelas terbitan.
  • Anda juga boleh menulis kaedah contoh baharu dalam subkelas yang mempunyai tandatangan yang sama seperti kaedah dalam kelas induk. Prosedur ini mengatasinya.
  • Anda boleh mengisytiharkan kaedah baharu dalam kelas anak yang tidak diisytiharkan dalam kelas Induk.
  • Anda boleh menulis pembina subkelas yang memanggil pembina superclass sama ada secara tersirat atau dengan kata kunci super.

Contoh

Mari buat kelas MusicalInstrument asas dengan medan berat dan tanda dagangan, serta kaedah kerja() . Kami juga mentakrifkan pembina.
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 sama sekali jenis alat muzik itu dan cara memainkannya. Mari kita cipta alat yang lebih khusus, biola. Ia akan mempunyai medan yang sama seperti dalam Alat Muzik (ia akan dipanggil dalam pembina menggunakan kata kunci super. Kami juga boleh mengatasi kaedah kerja dan mencipta kaedah untuk menetapkan rentetan biola dengan rentetan.
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 buat kelas Demo untuk menguji kelas Violin dan lihat dengan tepat cara warisan berfungsi.
public class InheritDemo {

   public static void main(String[] args) {

       Violin violin = new Violin(1, null, "Amati", "Kremer", 285, false);
       violin.violinTuning();
       violin.work();
   }
}
Dalam kes ini, output program adalah seperti berikut:
Saya sedang menala rentetan pertama... Saya menala rentetan ke-2... Saya menala rentetan ke-3... Saya menala rentetan ke-4... Biola sedang bermain
Iaitu, jika terdapat kaedah yang ditindih dalam kelas kanak-kanak, maka kaedah nenek moyang tidak akan dipanggil lagi. Bagaimana jika ia tidak ada? Iaitu, kelas Violin kelihatan 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 ialah:
Saya menala tali pertama... Saya menala tali ke-2... Saya menala tali ke-3... Saya menala tali ke-4... alat muzik sedang dimainkan...
Iaitu, kaedah nenek moyang akan dipanggil secara automatik. Dengan cara ini, kelas kanak-kanak boleh ditakrifkan melalui nenek moyang, iaitu, untuk melakukan upcasting:
Parent parent = new Child()
Inisialisasi ini digunakan untuk mengakses hanya ahli yang hadir dalam kelas induk dan kaedah yang diganti. Dalam contoh kami ia 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 kes sedemikian, kami tidak dapat mengkonfigurasi kaedah biola. Namun pada masa yang sama, kaedah kerja() kelas keturunan akan dipanggil, jika wujud.

Hierarki Kelas Platform Java

Di Jawa, semuanya terdiri daripada kelas dan mereka berada di bawah hierarki. Persoalannya timbul: adakah terdapat kelas yang daripadanya semua yang lain diwarisi? Jawapannya ya, memang kelas sebegitu wujud. Dan ia dipanggil hanya Object . Kelas Objek daripada pakej java.lang, mentakrifkan dan melaksanakan tingkah laku yang biasa kepada semua kelas, termasuk kelas yang anda buat. Dalam platform Java, banyak kelas diperoleh secara langsung daripada Object , kelas lain diperoleh daripada beberapa kelas ini, dan seterusnya, membentuk hierarki kelas.

Jenis Warisan di Jawa

Mari kita serlahkan beberapa jenis warisan di Jawa. 1. Warisan Tunggal Jenis ini sama seperti dalam contoh kami di atas, subkelas mewarisi ciri satu kelas super. Dalam imej di bawah, kelas A berfungsi sebagai kelas asas untuk kelas B yang diturunkan. 2. Warisan Berbilang Peringkat Ini hanyalah rantaian warisan, iaitu, terdapat kelas asas A, kelas B diwarisi daripadanya, dan kelas C diwarisi daripada kelas B. Di Jawa, kelas tidak boleh mengakses ahli datuk dan nenek secara langsung. 3. Warisan Hierarki Dalam Warisan Hierarki, satu kelas berfungsi sebagai kelas super (kelas asas) untuk lebih daripada satu subkelas. Di atas, kami memberikan contoh kelas Telefon, yang boleh mempunyai 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 ialah:
A B A C A D
4. Warisan berbilang, iaitu, kehadiran beberapa nenek moyang ... tetapi tunggu, warisan berbilang klasik tidak disokong di Jawa. Pada tahap tertentu, ia boleh dilaksanakan menggunakan bukan kelas, tetapi antara muka.
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() {
   }
}
Komen
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION