Rumah > Java > javaTutorial > teks badan

Kata Kunci Statik: Berlebihan, Mengatasi dan Peranan ini dan super

Barbara Streisand
Lepaskan: 2024-10-26 07:33:30
asal
615 orang telah melayarinya

Static Keyword: Overloading, Overriding, and the Role of this and super

Siaran ini melanjutkan perbincangan kami sebelum ini tentang kata kunci statik dengan menumpukan pada konsep melebihi muatan kaedah dan mengatasi kaedah dalam konteks statik kaedah. Kami juga akan meneroka cara kata kunci ini dan super berkelakuan (atau tidak) dalam konteks statik.

Jika anda baru menggunakan kata kunci statik, mungkin berguna untuk terlebih dahulu melalui Pembolehubah Statik dan Kaedah Statik.

Memandangkan siaran ini menyentuh gelagat ini dan super dalam konteks statik, anda juga mungkin mahu membaca Kata Kunci dan Kata Kunci Super Ini.


Topik Utama dalam Catatan Ini:

  1. Melebihi muatan Kaedah Statik

  2. Mengapa Kaedah Statik Tidak Boleh Ditolak

  3. Menggunakan ini dan Kata Kunci super dalam Konteks Statik

  4. Contoh Menunjukkan Konsep Utama


1. Kaedah Statik Terlebih Beban

Di Java, lebih muatan membenarkan kaedah dengan nama yang sama wujud dengan senarai parameter yang berbeza. Kaedah statik boleh dibebankan seperti kaedah contoh. Walau bagaimanapun, perlu diingat bahawa beban berlebihan berlaku pada masa penyusunan.

Contoh Kod:

package keywords.static_keyword;

public class StaticVariables {

    static int idStatic = 1;

    public StaticVariables(String name) {
        this.id = ++idStatic;
        this.name = name;
    }

    int id;
    String name;

    static void displayText() {
        System.out.println("DisplayText called. ID: " + idStatic);
    }

    // Overloaded static method with a parameter
    static void displayText(String name) {
        System.out.println("Overloaded DisplayText called. Name: " + name);
    }

    public static void main(String[] args) {
        StaticVariables.displayText();
        StaticVariables.displayText("Static Overload Example");
    }
}
Salin selepas log masuk
Salin selepas log masuk

Penjelasan:

  • Kaedah Terlebih Muatan: Kaedah displayText terlebih dimuatkan dengan dua versi—satu tanpa parameter dan satu dengan parameter Rentetan.

  • Ini adalah sah kerana Java boleh membezakan kedua-dua kaedah berdasarkan senarai parameter mereka semasa masa penyusunan.


2. Mengapa Kaedah Statik Tidak Boleh Ditolak

Java tidak membenarkan mengatasi kaedah statik. Memandangkan kaedah statik terikat kepada kelas dan bukannya pada contoh objek, mereka tidak mengambil bahagian dalam polimorfisme masa jalan, yang merupakan asas penggantian kaedah.

Walau bagaimanapun, pembolehubah statik diwarisi dan boleh diakses atau diubah suai oleh kelas kanak-kanak.

Contoh Kod:

package keywords.static_keyword;

public class StaticVariables {

    static int idStatic = 1;

    public StaticVariables(String name) {
        this.id = ++idStatic;
        this.name = name;
    }

    int id;
    String name;

    static void displayText() {
        System.out.println("DisplayText called. ID: " + idStatic);
    }

    // Overloaded static method with a parameter
    static void displayText(String name) {
        System.out.println("Overloaded DisplayText called. Name: " + name);
    }

    public static void main(String[] args) {
        StaticVariables.displayText();
        StaticVariables.displayText("Static Overload Example");
    }
}
Salin selepas log masuk
Salin selepas log masuk

Penjelasan:

  • Tiada Overriding: Kaedah @Override yang dikomen keluar menunjukkan percubaan untuk mengatasi kaedah statik, yang mengakibatkan ralat masa kompilasi kerana overriding hanya terpakai pada kaedah contoh.
  • Pewarisan Pembolehubah Statik: Walaupun kaedah statik tidak boleh ditindih, pembolehubah statik diwarisi dan boleh diakses atau diubah suai dalam kelas anak.
  • Memanggil Kaedah Statik: Kaedah statik mesti dipanggil menggunakan nama kelas atau terus jika ia berada dalam kelas yang sama.

3. Penggunaan ini dan Kata Kunci super dalam Konteks Statik

  • Kata Kunci ini: Merujuk kepada tika semasa kelas. Memandangkan kaedah statik tidak beroperasi pada mana-mana kejadian, menggunakan ini dalam konteks statik akan menyebabkan ralat masa kompilasi.

Contoh:

package keywords.static_keyword;

public class CannotOverrideStaticMethod extends StaticVariables {

    public CannotOverrideStaticMethod(String name) {
        super(name);
    }

    // Attempting to override the static method 
    // This will cause a compile-time error
    /*
    @Override
    static void displayText() {
        System.out.println("Overridden DisplayText");
    }
    */

    @Override
    void display() {
        // Static variables are inherited from the parent class
        idStatic = 90;  // Access and modify the parent's static variable
        System.out.println("ID: " + idStatic + ", Name: " + name);
        super.display();  // Call the parent class's non-static method
    }

    // Correct way to use static methods from the parent class
    static void displayText() {
        StaticVariables.displayText(); // Call the parent class static method
    }

    public static void main(String[] args) {
        displayText();  // Calls the static method defined in this class
    }
}
Salin selepas log masuk
  • Kata Kunci super: Begitu juga, kata kunci super merujuk kepada contoh kelas induk. Memandangkan kaedah statik tergolong dalam kelas dan bukan contoh, super juga tidak sah dalam konteks statik.

Contoh:

static void displayText() {
    // Cannot use 'this' in a static context
    this.display();  // --> Compile-time error
}
Salin selepas log masuk

Penjelasan Tambahan:

  • Konsep 1: Penggantian mendayakan polimorfisme masa jalan, yang bergantung pada kejadian. Memandangkan kaedah statik tidak dikaitkan dengan kejadian, kaedah tersebut tidak boleh ditindih. Walau bagaimanapun, pembolehubah statik diwarisi dan boleh diakses atau diubah suai dalam kelas kanak-kanak, seperti yang ditunjukkan dalam contoh.
  • Konsep 2: Kedua-dua ini dan super merujuk kepada contoh—ini merujuk kepada ahli objek semasa, manakala super merujuk kepada ahli objek induk. Memandangkan kaedah statik beroperasi secara bebas daripada sebarang kejadian, ini mahupun super tidak boleh digunakan dalam kaedah statik atau blok statik.

4. Ringkasan Konsep Utama

  • Kaedah Statik Boleh Dibebankan: Anda boleh mentakrifkan berbilang kaedah statik dengan nama yang sama tetapi senarai parameter yang berbeza. Ini diselesaikan semasa masa penyusunan.
  • Kaedah Statik Tidak Boleh Ditimpa: Memandangkan kaedah statik tergolong dalam kelas dan bukannya contoh, kaedah tersebut tidak menyokong polimorfisme masa jalan.
  • Pembolehubah Statik Diwarisi: Pembolehubah statik daripada kelas induk boleh diakses dan diubah suai dalam kelas anak.
  • Tiada ini atau super dalam Konteks Statik: Memandangkan kaedah statik tidak beroperasi pada kejadian, kata kunci ini dan super tidak boleh digunakan.

Kesimpulan

Dalam siaran ini, kami membincangkan nuansa melebihi beban dan mengatasi kaedah statik, membincangkan kekangan menggunakan ini dan super dalam konteks statik dan menerangkan cara pembolehubah statik berkelakuan merentas warisan. Konsep ini penting untuk memahami cara ahli statik berbeza daripada ahli instance di Java.


Catatan Berkaitan

  • Asas Java

  • Keperluan Temuduga Tatasusunan

  • Java Memory Essentials

  • Kerangka Koleksi Penting

Selamat Pengekodan!

Atas ialah kandungan terperinci Kata Kunci Statik: Berlebihan, Mengatasi dan Peranan ini dan super. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:dev.to
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!