cari
RumahJavajavaTutorialKelas Tertutup en Java

Kelas Tertutup en Java

Oct 29, 2024 am 01:37 AM

Sealed Classes en Java

kelas tertutup ialah ciri yang sebelum ini diperkenalkan dalam JDK 15 dan secara rasmi dalam JDK 17. kelas tertutup ialah kelas yang tidak boleh dilanjutkan oleh kelas yang tidak dibenarkan secara eksplisit (dalam pengisytiharan kelas), jadi bilangan subkelas adalah terhad dan diketahui lebih awal.

Ia bertujuan untuk membenarkan kawalan yang lebih tepat ke atas hierarki warisan, serta memudahkan pemodelan domain di mana semua kemungkinan subkelas diketahui, dan meningkatkan keselamatan dan kebolehselenggaraan kod.

Perbezaan antara kelas tertutup dan kelas jenis akhir ialah kelas terakhir tidak boleh dilanjutkan oleh mana-mana kelas, manakala kelas tertutup boleh dilanjutkan dengan bilangan terhad daripada kelas.

Pengisytiharan kelas tertutup

Andaikan kita mempunyai dua kelas, kelas Shape dan kelas Circle, kedua-duanya adalah kelas biasa, jadi Shape boleh dilanjutkan oleh mana-mana kelas.

public class Shape {
    // ...
}

public class Circle extends Shape {
    // ...
}

Jika kita menggunakan kata kunci akhir dalam kelas Shape, maka ia tidak boleh dilanjutkan oleh mana-mana kelas.

public final class Shape {
    // ...
}

public class Circle extends Shape { // Error
    // ...
}

Sekarang, jika kita mahu kelas Shape dilanjutkan hanya oleh kelas tertentu (contohnya, Bulatan dan Square), maka kita boleh mengisytiharkannya sebagai kelas tertutup.

public sealed class Shape permits Circle, Square {
    // ...
}

Menganalisis pengisytiharan sebelumnya, kami melihat bahawa adalah perlu untuk meletakkan dimeterai sebelum kelas perkataan untuk menunjukkan bahawa ia adalah kelas tertutup. Kemudian, perkataan permit digunakan diikuti dengan senarai kelas yang boleh melanjutkan kelas semasa, dalam contoh di atas, hanya kelas Bulatan dan Square boleh melanjutkan kelas Bentuk.

Perkara yang sama berlaku jika anda bekerja dengan kelas jenis abstrak, iaitu, kelas yang tidak boleh digunakan, tetapi boleh dilanjutkan oleh kelas lain.

public sealed abstract class Shape permits Circle, Square {
    // ...
}

Konsep ini juga boleh digunakan pada antara muka.

public sealed interface Shape permits Circle, Square {
    // ...
}

Nota: Subkelas yang dibenarkan mesti berada dalam modul atau pakej yang sama dengan kelas dimeterai, jika tidak, mesej ralat akan dipaparkan.

Kelas yang dibenarkan

Setelah kelas diisytiharkan dimeterai dan kelas yang dibenarkan telah ditentukan, apabila melanjutkan kelas Shape dengan kelas yang dibenarkan (dengan meletakkan extends Shape) IDE akan memaparkan mesej ralat yang serupa dengan ini Pengubah suai 'dimeterai' , 'tidak dimeterai' atau 'akhir' dijangka, Apakah maksudnya?.

Perlu diambil kira bahawa setiap kelas yang dibenarkan (subkelas) mesti diisytiharkan dengan salah satu daripada kata kunci berikut:

  • akhir: Menunjukkan bahawa kelas tidak boleh dilanjutkan.
  • dimeterai: Menunjukkan bahawa kelas ialah kelas tertutup dan ia telah membenarkan subkelas.
  • tidak dimeterai: Menunjukkan bahawa kelas itu bukan kelas tertutup dan ia boleh dilanjutkan oleh mana-mana kelas.

Untuk mempraktikkan perkara di atas, mari kita bekerjasama dengan kelas Shape dan kelas Bulatan, Square dan Triangle untuk melihat cara kelas yang dibenarkan boleh diisytiharkan mengikut apa yang dinyatakan di atas.

public class Shape {
    // ...
}

public class Circle extends Shape {
    // ...
}

Kelas bulatan - akhir

Jika kita mahu kelas Bulatan menjadi jenis terakhir dan akibatnya tidak boleh dilanjutkan, maka ia mesti diisytiharkan seperti berikut:

public final class Shape {
    // ...
}

public class Circle extends Shape { // Error
    // ...
}

Ini menghalang kelas Bulatan daripada dilanjutkan oleh mana-mana kelas lain.

Kelas persegi - dimeterai

Jika kita mahu kelas Square mempunyai jenis yang dimeterai dan telah membenarkan subkelas yang boleh memanjangkannya, maka ia mesti diisytiharkan seperti berikut:

public sealed class Shape permits Circle, Square {
    // ...
}

Untuk contoh ini, setiap kelas yang dibenarkan (SquareChild1 dan SquareChild2) diisytiharkan sebagai jenis muktamad supaya mereka tidak boleh dilanjutkan oleh mana-mana kelas lain.

public sealed abstract class Shape permits Circle, Square {
    // ...
}

Jika anda mahu kelas ini boleh dilanjutkan oleh lebih banyak kelas, maka kelas itu hendaklah diisytiharkan sebagai dimeterai atau boleh dilanjutkan oleh mana-mana kelas yang tidak dimeterai.

Kelas segi tiga - tidak bertutup

Dalam kes kelas Triangle, apabila ia diisytiharkan tidak dimeterai, ia membenarkan kelas ini dilanjutkan oleh mana-mana kelas lain, tanpa perlu menyatakan kelas yang dibenarkan.

public sealed interface Shape permits Circle, Square {
    // ...
}

Sebagai contoh, jika anda mencipta kelas TriangleChild yang memanjangkan Triangle, tiada mesej ralat akan dipaparkan.

public sealed class Shape permits Circle, Square, Triangle {
    // ...
}

Pada ketika ini adalah penting untuk mempertimbangkan bahawa jika anda mengisytiharkan kelas sebagai tidak dimeterai anda "break" dengan cara tertentu tujuan kelas tertutup, kerana ia membenarkan kelas ini dilanjutkan oleh mana-mana kelas lain dan bilangan subkelas yang dibenarkan tidak terhad.

Bolehkah rekod menjadi kelas tertutup?

Untuk bahagiannya, rekod tidak boleh daripada jenis yang dimeterai kerana ia sudah pun daripada jenis terakhir dan tidak boleh dilanjutkan oleh mana-mana kelas lain. Tetapi apa yang anda boleh lakukan ialah mengisytiharkan rekod seperti yang dibenarkan dalam antara muka jenis tertutup (pertimbangkan bahawa rekod tidak boleh melanjutkan kelas, hanya melaksanakan antara muka). Sebagai contoh, jika anda mempunyai rekod yang dipanggil Rectangle dan antara muka Bentuk jenis dimeterai, anda boleh mengisytiharkan Rectangle seperti yang dibenarkan dalam antara muka Shape dan dengan cara ini Rectangle akan dapat melaksanakan antara muka Shape dan semua kaedah yang mengandungi antara muka ini.

public class Shape {
    // ...
}

public class Circle extends Shape {
    // ...
}

Bagaimana dengan kelas dalaman?

Jika kelas yang diisytiharkan sebagai dimeterai mempunyai kelas dalam (kelas bersarang atau dalam), diandaikan bahawa kelas ini tergolong dalam kelas utama dan, oleh itu, tidak perlu mengisytiharkannya sebagai dibenarkan. Sebagai contoh, jika anda mempunyai kelas Haiwan yang diisytiharkan sebagai dimeterai dan pada masa yang sama ia mempunyai Dog dan Cat sebagai kelas dalaman, kelas ini tidak perlu diisytiharkan sebagai dibenarkan, tetapi mereka mesti melanjutkan kelas utama dan daripada jenis terakhir , dimeterai atau tidak dimeterai .

public final class Shape {
    // ...
}

public class Circle extends Shape { // Error
    // ...
}

Kesimpulan

Kelas tertutup ialah satu cara untuk mengehadkan hierarki kelas kepada bilangan terhingga subkelas yang dibenarkan, walaupun kita telah melihat bahawa jika kelas diisytiharkan tidak dimeterai tujuannya agak hilang atau Dengan mengisytiharkan subkelas sebagai dimeterai anda boleh melanjutkan hierarki ini lebih jauh lagi.

Adalah penting untuk mempertimbangkan bahawa apabila mengisytiharkan kelas sebagai dimeterai ini hanya merujuk kepada siapa yang boleh melanjutkannya, tetapi tidak mengehadkan penciptaan contoh kelas utama, dan ia juga tidak mengubah suai semantik kelas, iaitu, ia tidak mengubah suai gelagat dalaman kelas.

Atas ialah kandungan terperinci Kelas Tertutup en 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
Bagaimanakah saya menggunakan Maven atau Gradle untuk Pengurusan Projek Java Lanjutan, Membina Automasi, dan Resolusi Ketergantungan?Bagaimanakah saya menggunakan Maven atau Gradle untuk Pengurusan Projek Java Lanjutan, Membina Automasi, dan Resolusi Ketergantungan?Mar 17, 2025 pm 05:46 PM

Artikel ini membincangkan menggunakan Maven dan Gradle untuk Pengurusan Projek Java, membina automasi, dan resolusi pergantungan, membandingkan pendekatan dan strategi pengoptimuman mereka.

Bagaimanakah saya membuat dan menggunakan perpustakaan Java Custom (fail JAR) dengan pengurusan versi dan pergantungan yang betul?Bagaimanakah saya membuat dan menggunakan perpustakaan Java Custom (fail JAR) dengan pengurusan versi dan pergantungan yang betul?Mar 17, 2025 pm 05:45 PM

Artikel ini membincangkan membuat dan menggunakan perpustakaan Java tersuai (fail balang) dengan pengurusan versi dan pergantungan yang betul, menggunakan alat seperti Maven dan Gradle.

Bagaimanakah saya melaksanakan caching pelbagai peringkat dalam aplikasi java menggunakan perpustakaan seperti kafein atau cache jambu?Bagaimanakah saya melaksanakan caching pelbagai peringkat dalam aplikasi java menggunakan perpustakaan seperti kafein atau cache jambu?Mar 17, 2025 pm 05:44 PM

Artikel ini membincangkan pelaksanaan caching pelbagai peringkat di Java menggunakan kafein dan cache jambu untuk meningkatkan prestasi aplikasi. Ia meliputi persediaan, integrasi, dan faedah prestasi, bersama -sama dengan Pengurusan Dasar Konfigurasi dan Pengusiran PRA Terbaik

Bagaimanakah saya boleh menggunakan JPA (Java Constence API) untuk pemetaan objek-objek dengan ciri-ciri canggih seperti caching dan malas malas?Bagaimanakah saya boleh menggunakan JPA (Java Constence API) untuk pemetaan objek-objek dengan ciri-ciri canggih seperti caching dan malas malas?Mar 17, 2025 pm 05:43 PM

Artikel ini membincangkan menggunakan JPA untuk pemetaan objek-relasi dengan ciri-ciri canggih seperti caching dan pemuatan malas. Ia meliputi persediaan, pemetaan entiti, dan amalan terbaik untuk mengoptimumkan prestasi sambil menonjolkan potensi perangkap. [159 aksara]

Bagaimanakah mekanisme kelas muatan Java berfungsi, termasuk kelas yang berbeza dan model delegasi mereka?Bagaimanakah mekanisme kelas muatan Java berfungsi, termasuk kelas yang berbeza dan model delegasi mereka?Mar 17, 2025 pm 05:35 PM

Kelas kelas Java melibatkan pemuatan, menghubungkan, dan memulakan kelas menggunakan sistem hierarki dengan bootstrap, lanjutan, dan pemuat kelas aplikasi. Model delegasi induk memastikan kelas teras dimuatkan dahulu, yang mempengaruhi LOA kelas tersuai

See all articles

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

AI Hentai Generator

AI Hentai Generator

Menjana ai hentai secara percuma.

Artikel Panas

R.E.P.O. Kristal tenaga dijelaskan dan apa yang mereka lakukan (kristal kuning)
4 minggu yang laluBy尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Tetapan grafik terbaik
4 minggu yang laluBy尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Cara Memperbaiki Audio Jika anda tidak dapat mendengar sesiapa
4 minggu yang laluBy尊渡假赌尊渡假赌尊渡假赌
WWE 2K25: Cara Membuka Segala -galanya Di Myrise
1 bulan yang laluBy尊渡假赌尊渡假赌尊渡假赌

Alat panas

VSCode Windows 64-bit Muat Turun

VSCode Windows 64-bit Muat Turun

Editor IDE percuma dan berkuasa yang dilancarkan oleh Microsoft

EditPlus versi Cina retak

EditPlus versi Cina retak

Saiz kecil, penyerlahan sintaks, tidak menyokong fungsi gesaan kod

SublimeText3 Linux versi baharu

SublimeText3 Linux versi baharu

SublimeText3 Linux versi terkini

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

DVWA

DVWA

Damn Vulnerable Web App (DVWA) ialah aplikasi web PHP/MySQL yang sangat terdedah. Matlamat utamanya adalah untuk menjadi bantuan bagi profesional keselamatan untuk menguji kemahiran dan alatan mereka dalam persekitaran undang-undang, untuk membantu pembangun web lebih memahami proses mengamankan aplikasi web, dan untuk membantu guru/pelajar mengajar/belajar dalam persekitaran bilik darjah Aplikasi web keselamatan. Matlamat DVWA adalah untuk mempraktikkan beberapa kelemahan web yang paling biasa melalui antara muka yang mudah dan mudah, dengan pelbagai tahap kesukaran. Sila ambil perhatian bahawa perisian ini