Apa itu warisan (diperpanjang)?
Warisan adalah: Kelas yang baru didefinisikan adalah fenomena memperoleh atribut dan metode dari kelas yang ada. Kelas yang sudah ada ini disebut kelas induk, dan kelas yang memperoleh properti dan metode dari kelas induk ini disebut subclass.
ExtendSDemo1.java
Salinan kode adalah sebagai berikut:
/*Apa itu warisan*/
kelas publik extendSdemo1 {
public static void main (string [] args) {
Truk t = truk baru ();
T.Size = 100; // Ini tidak disarankan. Yang terbaik adalah menggunakan konstruktor untuk menginisialisasi variabel anggota, atau menyediakan antarmuka set () dan get ().
// Sebuah contoh kelas truk mewarisi ukuran dan atribut warna dari kelas mobil.
// truk mana yang memiliki satu kotak kargo lebih dari mobil
}
}
Mobil kelas {// mobil
ukuran int; // ukuran tubuh
Warna string; // warna
}
truk kelas memperpanjang mobil {// truk
String PackingBox; // Kotak Kargo
}
Manfaat warisan
1. Peningkatan Kode Penyusunan Ulang
2. Biarkan hubungan antar kelas menciptakan kondisi untuk polimorfisme.
Format yang diwariskan (memperluas)
Salinan kode adalah sebagai berikut:
Subkelas kelas memperluas superclass {
// Jalankan pernyataan;
}
kata kunci super
1. Penggunaan kata kunci super sama dengan ini
2. Ini mewakili referensi kelas ini, dan Super mewakili referensi kelas induk
3. Ketika anggota dengan nama yang sama muncul di kelas subkelas dan orang tua, Anda dapat menggunakan Super dan ini untuk membedakannya.
Superdemo.java
Salinan kode adalah sebagai berikut:
/* Penggunaan Super
* Hasil output:
* super.i = 10, this.i = 20
*/
SuperDemo kelas publik {
public static void main (string [] args) {
subclass baru (). Showmessage ();
}
}
kelas superclass {
int i = 10;
}
Subkelas kelas memperluas superclass {
int i = 20;
public void showMessage () {
System.out.printf ("super.i = %d, this.i = %d/n", super.i, this.i);
}
}
Override Metode yang diwarisi dari kelas induk (override)
1. Ketika metode persis sama dengan kelas induk muncul di subkelas (nilai pengembalian, nama fungsi, parameter formal), operasi override akan terjadi.
Overridedemo1.java
Salinan kode adalah sebagai berikut:
/* Cara mengganti metode yang diwarisi dari kelas induk (override)
* Hasil output:
* Superclass: Saya baik ~
* Subclass: Saya sangat baik ~~~
*/
kelas publik overridedemo1 {
public static void main (string [] args) {
Subclass sc = subclass baru ();
sc.speak ();
}
}
kelas superclass {
public void speak () {
System.out.println ("Superclass: Saya Baik ~");
}
}
Subkelas kelas memperluas superclass {
@Override //@override berarti bahwa metode berikut akan memiliki operasi penulisan ulang. Meningkatkan keamanan kode sampai batas tertentu
dan ketahanan
public void speak () {
super.speak ();
System.out.println ("Subclass: Saya sangat baik ~~~");
}
}
2. Saat mengesampingkan metode kelas induk, kelas anak tidak mengizinkan metode dengan nama dan parameter yang sama dengan kelas induk tetapi dengan jenis pengembalian yang berbeda.
Overridedemo2.java
Salinan kode adalah sebagai berikut:
/* Metode dengan nama dan parameter yang sama dengan kelas induk tetapi dengan jenis pengembalian yang berbeda tidak diizinkan dalam subkelas.
* Pesan Kesalahan:
* Overridedemo.java:20: kesalahan: f () di subkelas tidak dapat mengganti f () di superclass
* public int f () {
* ^
* Tipe pengembalian int tidak kompatibel dengan void
* Overridedemo.java:19: Kesalahan: Metode tidak mengganti atau mengimplementasikan metode dari supertype
* @Override
* ^
* 2 kesalahan
*/
kelas publik overridedemo2 {
public static void main (string [] args) {
}
}
kelas superclass {
public void f () {
}
}
Subkelas kelas memperluas superclass {
@Mengesampingkan
public int f () {
kembali 1;
}
}
3. Izin akses dari metode subkelas menulis ulang kelas induk harus lebih besar dari atau sama dengan metode penulisan ulang di kelas induk.
Overridedemo3.java
Salinan kode adalah sebagai berikut:
/* Izin akses dari metode subkelas menimpa kelas induk harus lebih besar dari atau sama dengan izin akses dari metode kelas induk
* Pesan Kesalahan:
* Overridedemo.java:18: Kesalahan: f () di subkelas tidak dapat mengganti f () di superclass
* void f () yang dilindungi {
* ^
* Mencoba menetapkan hak akses yang lebih lemah;
* 1 kesalahan
*/
kelas publik overridedemo3 {
public static void main (string [] args) {
}
}
kelas superclass {
public void f () {
}
}
Subkelas kelas memperluas superclass {
@Mengesampingkan
void f () yang dilindungi {// ubah izin akses di sini menjadi publik
}
}
Pengontrol akses
Karakter kontrol akses adalah: publik, terlindungi, default, pribadi
Beberapa membutuhkan sedikit pengetahuan tentang paket, jadi saya akan membicarakannya ketika saya berbicara tentang paket.