Rumah >Java >javaTutorial >Bolehkah Anda Membuat Kelas Abstrak di Java?

Bolehkah Anda Membuat Kelas Abstrak di Java?

Patricia Arquette
Patricia Arquetteasal
2024-12-07 20:42:14584semak imbas

Can You Instantiate an Abstract Class in Java?

Instansiasi Kelas Abstrak

Dalam senario temu bual, persoalan sama ada kita boleh membuat instantiate kelas abstrak mungkin timbul. Secara tradisinya, jawapannya ialah kita tidak boleh membuat instantiate kelas abstrak, kerana ia mewakili konsep atau takrifan yang tidak lengkap. Walau bagaimanapun, anekdot temu bual baru-baru ini mencabar tanggapan ini.

Teka-teki Temuduga

Semasa temu duga, calon ditanya sama ada boleh membuat kelas abstrak. Tanggapan awal adalah "Tidak," tetapi penemuduga membalas dengan demonstrasi. Kod berikut telah dibentangkan:

abstract class My {
    public void myMethod() {
        System.out.print("Abstract");
    }
}

class Poly {
    public static void main(String[] a) {
        My m = new My() {};
        m.myMethod();
    }
}

Subkelas Tanpa Nama

Kunci kepada teka-teki terletak pada baris instantiasi:

My m = new My() {};

Di sini , kami tidak secara langsung mencipta contoh kelas abstrak My. Sebaliknya, kami mencipta contoh subkelas My tanpa nama. Subkelas tanpa nama ialah subkelas tanpa nama yang dicipta dengan segera oleh pengkompil. Subkelas tanpa nama ini melaksanakan kaedah abstrak myMethod().

Proses Penciptaan Objek

Untuk memahami tingkah laku ini, mari rujuk Spesifikasi Bahasa Java (JLS). Bahagian 12.5 menerangkan proses penciptaan objek. Apabila objek baru dicipta, memori diperuntukkan contohnya pembolehubah dalam objek dan semua kelas supernya. Sebelum mengembalikan rujukan objek, pembina diproses untuk memulakan objek.

Bukti Penyusunan

Untuk menunjukkan lebih lanjut kewujudan subkelas tanpa nama, kita boleh menyusun kod . Fail kelas berikut akan dijana:

  • My.class
  • Poly$1.class (subclass tanpa nama)
  • Poly.class

Fail kelas subkelas tanpa nama (Poly$1.class) ialah bukti bahawa kami mencipta contoh subkelas, bukan kelas abstrak itu sendiri.

Kesimpulan

Walaupun ia mungkin kelihatan berlawanan dengan intuisi, kami boleh membuat kelas abstrak dengan mencipta subkelas tanpa nama. Tingkah laku ini didayakan oleh Java Virtual Machine (JVM), yang membolehkan penciptaan subkelas tanpa nama dengan cepat. Walau bagaimanapun, adalah penting untuk diingat bahawa objek yang kami cipta masih merupakan contoh subkelas awanama, bukan kelas abstrak secara langsung.

Atas ialah kandungan terperinci Bolehkah Anda Membuat Kelas Abstrak di Java?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
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