CodeGym /Blog Java /rawak /Hubungan antara kelas. Pewarisan, gubahan dan pengagregat...
John Squirrels
Tahap
San Francisco

Hubungan antara kelas. Pewarisan, gubahan dan pengagregatan

Diterbitkan dalam kumpulan
Hai! Hari ini kita akan melihat dengan lebih dekat satu prinsip Pengaturcaraan Berorientasikan Objek (OOP): Warisan. Kami juga akan mengkaji jenis perhubungan lain antara kelas: gubahan dan pengagregatan. Hubungan antara kelas.  Warisan, gubahan dan pengagregatan - 1Topik ini tidak sukar: anda telah menemui warisan dan contoh warisan berkali-kali dalam pelajaran lepas. Hari ini, perkara utama adalah untuk mengukuhkan pengetahuan anda, memeriksa mekanisme pewarisan dengan lebih terperinci, dan sekali lagi menjalankan beberapa contoh. :) Nah, jom!

Warisan di Jawa dan kelebihannya

Seperti yang anda pasti ingat, warisan ialah mekanisme yang membolehkan anda menerangkan kelas baharu berdasarkan kelas sedia ada (kelas induk). Dengan berbuat demikian, kelas baharu meminjam sifat dan kefungsian kelas induk. Mari kita ingat contoh warisan yang diberikan dalam pelajaran sebelumnya:

public class Car {

   private String model;
   private int maxSpeed;
   private int yearOfManufacture;

   public Car(String model, int maxSpeed, int yearOfManufacture) {
       this.model = model;
       this.maxSpeed = maxSpeed;
       this.yearOfManufacture = yearOfManufacture;
   }


public void gas() {
       // Gas
   }

   	public void brake() {
       // Brake
   }
}


public class Truck extends Car {

   public Truck(String model, int maxSpeed, int yearOfManufacture) {
       super(model, maxSpeed, yearOfManufacture);
   }
}



public class Sedan extends Car {
   public Sedan(String model, int maxSpeed, int yearOfManufacture) {
       super(model, maxSpeed, yearOfManufacture);
   }
}
Kami mempunyai program tertentu yang melibatkan kerja dengan pelbagai jenis kereta. Walaupun anda bukan peminat kereta, anda mungkin tahu bahawa terdapat banyak jenis kereta di dunia. :) Sehubungan itu, kami akan mengasingkan sifat biasa kereta kepada kelas induk biasa yang dipanggil Car. Jadi apakah yang biasa kepada semua kereta, tanpa mengira jenisnya? Setiap kereta mempunyai tahun pembuatan, nama model, dan kelajuan maksimum. Kami meletakkan sifat ini ke dalam model, maxSpeed, dan yearOfManufacturemedan. Bagi tingkah laku, mana-mana kereta boleh memecut dan memperlahankan. :) Kami mentakrifkan tingkah laku ini dalam gas()danbrake()kaedah. Apakah faedah yang diberikan ini kepada kita? Pertama sekali, ia mengurangkan jumlah kod. Sudah tentu, kita boleh melakukannya tanpa kelas induk. Tetapi oleh kerana setiap kereta mesti boleh memecut dan memperlahankan, kita perlu mencipta gas()dan brake()kaedah dalam Truck, Sedan, F1Car, dan SportsCarkelas dan dalam setiap kelas kereta lain. Bayangkan berapa banyak kod tambahan yang perlu kita tulis. Dan jangan lupa tentang model, maxSpeed, dan yearOfManufacturemedan: jika kita menyingkirkan kelas induk, kita perlu menciptanya dalam setiap kelas kereta! Hubungan antara kelas.  Warisan, gubahan dan pengagregatan - 2Apabila kami mempunyai beberapa dozen kelas kereta, jumlah kod pendua menjadi sangat serius. Mengalihkan medan dan kaedah biasa (juga dipanggil "keadaan" dan "kelakuan") ke kelas induk membolehkan kami menjimatkan banyak masa dan ruang. Jika sesetengah jenis mempunyai ciri atau kaedah unik yang tidak dimiliki oleh jenis kereta lain, bukan masalah besar. Anda sentiasa boleh menciptanya dalam kelas keturunan, berasingan daripada orang lain.

public class F1Car extends Car {

   public void pitStop() {

       // Only race cars make pit stops
   }

   public static void main(String[] args) {

       F1Car formula1Car = new F1Car();
       formula1Car.gas();
       formula1Car.pitStop();
       formula1Car.brake();
   }
}
Mari kita lihat kereta lumba Formula Satu sebagai contoh. Tidak seperti "saudara mara" mereka, mereka mempunyai tingkah laku yang unik — mereka berhenti dari semasa ke semasa. Ini tidak mengganggu kita. Kami telah menerangkan gelagat biasa dalam Carkelas induk dan gelagat khusus kelas keturunan boleh ditambahkan pada kelas tersebut. Hubungan antara kelas.  Warisan, gubahan dan pengagregatan - 3Perkara yang sama berlaku untuk medan: jika kelas kanak-kanak mempunyai sifat unik, kami dengan tenang mengisytiharkan medan ini di dalam kelas kanak-kanak dan berhenti bimbang. :) Keupayaan untuk menggunakan semula kod adalah kelebihan utama warisan. Bagi pengaturcara, adalah sangat penting untuk tidak menulis kod tambahan. Anda akan menemui perkara ini berulang kali dalam kerja anda. Sila ingat sesuatu yang penting lagi: Java tidak mempunyai banyak warisan. Setiap kelas hanya mewarisi satu kelas. Kita akan bercakap lebih lanjut tentang sebab-sebab ini dalam pelajaran akan datang. Buat masa ini, ingat sahaja. Dengan cara ini, ini menjadikan Java berbeza daripada beberapa bahasa OOP lain. Sebagai contoh, C++ menyokong pelbagai warisan. Semuanya lebih kurang jelas dengan harta pusaka. Jom teruskan.

Komposisi dan pengagregatan

Kelas dan objek boleh dihubungkan bersama. Warisan menerangkan hubungan "adalah-a". Singa adalah haiwan. Hubungan sedemikian mudah dinyatakan menggunakan warisan, di mana Animalkelas induk dan Lionanak. Walau bagaimanapun, tidak semua hubungan digambarkan dengan cara ini. Sebagai contoh, papan kekunci pasti berkaitan dengan komputer, tetapi ia bukan komputer . Tangan entah bagaimana berkaitan dengan seseorang, tetapi ia bukan seseorang. Dalam kes ini, kita mempunyai satu lagi jenis perhubungan: bukan "is-a", tetapi "has-a". Tangan bukanlah seseorang, tetapi adalah sebahagian daripada seseorang. Papan kekunci bukan komputer, tetapi merupakan sebahagian daripada komputer. Perhubungan mempunyai-a boleh diterangkan dalam kod menggunakan gubahan dan pengagregatan. Perbezaannya terletak pada "ketaatan" perhubungan. Mari kita berikan contoh mudah: Kami mempunyai kelas Car. Setiap kereta ada enjin. Selain itu, setiap kereta mempunyai penumpang. Apakah perbezaan asas antara medan Engine enginedan Passenger[] passengers? Fakta bahawa penumpang Aduduk di dalam kereta tidak bermakna penumpang Bdan Ctidak berada di dalam kereta. Sebuah kereta boleh sepadan dengan berbilang penumpang. Apatah lagi jika semua penumpang keluar dari kereta, ia tetap berfungsi dengan lancar. Hubungan antara Carkelas dan Passenger[] passengerstatasusunan adalah kurang ketat. Ia dipanggil pengagregatan . Ia memberikan satu lagi contoh pengagregatan yang baik. Katakan kita mempunyai Studentkelas dan aStudentGroupkelas. Seorang pelajar boleh menyertai berbilang organisasi pelajar: kelab fizik, kelab peminat Star Wars dan/atau kelab komedi pelajar. Komposisi adalah jenis hubungan yang lebih ketat. Apabila menggunakan gubahan, objek adalah sebahagian daripada beberapa objek dan tidak boleh dimiliki oleh objek lain daripada jenis yang sama. Contoh paling mudah ialah enjin kereta. Enjin adalah sebahagian daripada kereta dan tidak boleh menjadi sebahagian daripada kereta lain. Seperti yang anda lihat, hubungan mereka jauh lebih ketat daripada hubungan antara Cardan Passengers. Hubungan antara kelas.  Warisan, gubahan dan pengagregatan - 4
Komen
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION