Artikel ini menjelaskan warisan pemrograman berorientasi objek Java. Bagikan untuk referensi Anda, sebagai berikut:
Warisan: Kelas khusus memiliki semua sifat dan perilaku kelas umum.
Manfaat warisan:
1. Peningkatan Kode Penyusunan Ulang
2. Biarkan kelas memiliki hubungan dengan kelas sebelumnya, dan hanya dengan hubungan ini dapat ada karakteristik polimorfik. Warisan adalah hubungan antara kelas dan kelas sebelumnya.
Catatan:
1.java hanya mendukung warisan tunggal, bukan warisan ganda. Karena beberapa warisan memiliki risiko keamanan: Ketika beberapa kelas induk mendefinisikan fungsi yang sama, tetapi fungsinya berbeda, subclass tidak tahu mana yang harus dijalankan.
2. Ketika kelas anak mewarisi kelas induk, ia mewarisi semua metode dan sifat kelas induk dan dapat digunakan secara langsung.
3. Java mendukung warisan multi-lapisan, yaitu hubungan antara ayah-anak-anak
tata bahasa:
[CLASS MODIFIER] Nama Subkelas Kelas Memperluas Nama Kelas Induk {Pernyataan;}Misalnya:
kelas pserson {int usia; Nama string; public void speak () {System.out.println ("Hello World!"); }} // mewarisi kelas orang, mewarisi semua metode dan atribut siswa kelas induk memperluas pserson {public void study () {System.out.println ("Studi yang Baik!"); }} // mewarisi kelas orang, mewarisi semua metode dan atribut pekerja kelas induk memperluas pserson {public void work () {system.out.println ("kerja bagus!"); }}Cara menggunakan fungsi dalam sistem warisan (lihat dokumentasi API):
Periksa fungsi kelas induk dan buat objek subkelas untuk menggunakan fungsi
Ketiga skenario ini sering ditemui selama proses warisan:
1) Variabel dengan nama yang sama
1. Jika subkelas memiliki variabel anggota non-pribadi dengan nama yang sama, subclass mengakses variabel kelas ini, dan menggunakannya; Subkelas mengakses variabel dari nama yang sama di kelas induk, dan menggunakan Super.
2. Ini mewakili referensi ke objek kelas ini
3.Super mewakili referensi ke objek kelas induk (penggunaannya sama dengan ini)
2) berfungsi dengan nama yang sama
1. Jika suatu subkelas muncul fungsi persis sama dengan kelas induk (nama fungsi dan parameternya sama), ketika objek subclass memanggil fungsi, konten fungsi subclass akan dijalankan. , fungsi kelas induk akan ditimpa (juga disebut penulisan ulang).
2. Tulis ulang definisi: Ketika subclass mewarisi kelas induk, mengikuti fungsi kelas induk, dan memasuki subclass. Namun, meskipun subkelas memiliki fungsi ini, konten fungsi tidak konsisten dengan kelas induk. Pada saat ini, tidak perlu mendefinisikan fungsi baru, tetapi gunakan fitur override, mempertahankan definisi fungsi kelas induk, dan menulis ulang konten fungsi.
3. Catatan tentang penulisan ulang (ditimpa):
<1> Subclass menimpa kelas induk. Anda harus memastikan bahwa izin kelas anak lebih besar dari atau sama dengan izin kelas induk sebelum warisan, jika tidak kompilasi akan gagal. (Publik> Jangan Tulis Kata Kunci Retorika> Pribadi)
<2> statis hanya bisa menutupi statis
<3> Overload: Hanya lihat daftar parameter fungsi dengan nama yang sama dan tulis ulang: Metode kelas Parent Child harus persis sama (nama fungsi dan daftar parameter)
class fu {// public void show () Ketika kelas induk ditampilkan (), itu akan persis sama dengan fungsi subclass. Fungsi show dari kelas induk akan ditulis ulang public void show (nama string) // Fungsi acara dari kelas induk berbeda dari subkelas (daftar parameter berbeda), sehingga fungsi show dari kelas induk tidak akan ditulis ulang {system.out.println (nama); }} class zi memperluas fu {public void show () {System.out.println ("zi"); }} kelas jicheng {public static void main (string [] args) {zi z1 = new zi (); z1.show ("nihao"); // fungsi acara dari kelas induk akan disebut}}3) Konstruktor
1. Saat menginisialisasi objek subkelas, konstruktor kelas induk juga akan berjalan, karena baris pertama konstruktor subkelas memiliki pernyataan implisit super () secara default.
2. Super () akan mengakses konstruktor parameter berongga di kelas induk, dan baris pertama semua konstruktor dalam subkelas adalah super () secara default
3. Alasan mengapa subclass harus mengakses konstruktor kelas induk
<1> Karena subkelas data di kelas induk dapat diperoleh secara langsung, subkelas adalah terlebih dahulu melihat bagaimana kelas induk menginisialisasi data. Oleh karena itu, ketika subkelas diinisialisasi, pertama -tama mengakses konstruktor kelas induk secara default.
<2> Jika Anda ingin mengakses konstruktor yang diformulasikan oleh kelas induk atau konstruktor yang kelas induknya tidak memiliki parameter kosong, Anda dapat merumuskannya dengan mendefinisikan pernyataan super secara manual.
<3> Tentu saja, baris pertama konstruktor subkelas juga dapat ditentukan secara manual untuk mengakses konstruktor kelas ini, tetapi setidaknya salah satu konstruktor dalam subkelas akan mengakses konstruktor kelas induk.
class fu {string name; usia int; Fu () {System.out.println ("Hello fu");} fu (nama string) {System.out.println (name); } Fu (nama string, int usia) {this.name = name; this.age = usia; System.out.println ("Name:"+Name+", usia:"+usia); }} class Zi memperluas fu {//zi() {system.out.println("hello zi ");} secara default, konstruktor parameter zi () dari kelas induk akan disebut terlebih dahulu. Super ("Zhangsan", 20); // Gunakan pernyataan super secara manual untuk menentukan konstruktor kelas induk untuk mendapatkan informasi non-pribadi dari sistem kelas induk.out.println (nama+"::"+usia); }} class test {public static void main (string [] args) {zi z1 = new zi (); }}Contoh Pengecualian Konstruktor:
Tuliskan hasil program
kelas super {int i = 0; public super (string s) {i = 1; }} Demo kelas memperluas super {demo publik (string s) {i = 2; } public static void main (string [] args) {demo d = demo baru ("ya"); System.out.println (DI); }} // Kompilasi gagal karena konstruktor dengan parameter kosong hilang di kelas induk. // atau subkelas harus menentukan konstruktor di kelas induk untuk dipanggil melalui pernyataan super.Tulis ulang dan kelebihan contoh:
kelas demo {int show (int a, int b) {return 0;}}Fungsi -fungsi berikut dapat ada dalam subclass demo.
A.public int show (int a, int b) {return 0;} // ya, timpa.
B.Private int show (int a, int b) {return 0;} // tidak, izin tidak cukup.
C.private int show (int a, long b) {return 0;} // Ya, itu bukan fungsi yang sama dengan kelas induk. Tidak ada cakupan yang setara dengan kelebihan beban.
D. Public Short Show (int a, int b) {return 0;} // tidak, karena fungsi ini tidak dapat muncul di kelas yang sama dengan fungsi yang diberikan, atau di kelas induk anak.
E.Static int show (int a, int b) {return 0;} // tidak, statis hanya dapat menimpa statis. <br> <br> Jadi subkelas memungkinkan untuk menulis ulang dan kelebihan beban.
Untuk lebih banyak konten terkait Java, pembaca yang tertarik dengan situs ini dapat melihat topik: "Pendahuluan dan Tutorial Lanjutan tentang Pemrograman Berorientasi Objek Java", "Tutorial tentang Struktur Data Java dan Algorithma", "Ringkasan Keterampilan Operasi Java Java", "Ringkasan Operasi Java File dan Keterampilan Operasi Direktori" dan Ringkasan Java Operasi Java "," Ringkasan Operasi Java Keterampilan Operasi Direktori "dan" Ringkasan Java Ringkasan JAVA "
Saya harap artikel ini akan membantu pemrograman Java semua orang.