Mendeklarasikan Tipe Sealed
Batasi pihak yang dapat memperluas suatu tipe.
Mendeklarasikan Tipe Sealed adalah pelajaran Java Academy gratis di CoddyKit. Ini adalah pelajaran 1 dari 4. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar Java Academy, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus Java Academy mencakup 4 pelajaran total.
Apa Itu Tipe Tersegel
Kelas atau antarmuka tersegel membatasi tipe lain yang boleh mewarisi atau mengimplementasikannya. Dengan demikian, Anda dapat memodelkan himpunan kemungkinan yang tertutup dan dapat dianalisis oleh kompilator.
Masalah yang Diselesaikannya
Kelas public biasa dapat dibuat menjadi subkelas oleh siapa pun dan di mana pun. Terkadang Anda menginginkan tepat tiga bentuk atau dua jenis pembayaran tanpa kejutan. Penyegelan membuat maksud tersebut menjadi eksplisit dan diberlakukan.
Kata Kunci sealed
Tandai suatu tipe dengan sealed dan cantumkan subtipe yang diizinkan menggunakan permits. Setiap subtipe yang diizinkan harus mendeklarasikan modifier pewarisannya sendiri.
public class Main {
sealed interface Shape permits Circle, Square {}
record Circle(double radius) implements Shape {}
record Square(double side) implements Shape {}
public static void main(String[] args) {
Shape s = new Circle(2.0);
System.out.println(s);
}
}Modifier Subtipe
Setiap subtipe yang diizinkan harus berupa salah satu dari berikut: final (tidak dapat dibuat menjadi subkelas lebih lanjut), sealed (melanjutkan pembatasan), atau non-sealed (membuka kembali pewarisan secara bebas). Record secara implisit bersifat final.
Subkelas yang Tidak Dapat Diperluas Lagi
Menandai subkelas dengan final menutup hierarki pada cabang tersebut.
public class Main {
sealed interface Animal permits Dog, Cat {}
static final class Dog implements Animal {
public String toString() { return "Dog"; }
}
static final class Cat implements Animal {
public String toString() { return "Cat"; }
}
public static void main(String[] args) {
Animal a = new Dog();
System.out.println(a);
}
}Subkelas yang Dapat Dibuka Kembali
Subtipe non-sealed sengaja membuka kembali pewarisan, sehingga kelas yang belum dikenal dapat mewarisinya lagi. Gunakan ini secukupnya ketika salah satu cabang harus tetap terbuka.
public class Main {
sealed interface Plugin permits CorePlugin, ExternalPlugin {}
static final class CorePlugin implements Plugin {}
static non-sealed class ExternalPlugin implements Plugin {}
static class ThirdParty extends ExternalPlugin {}
public static void main(String[] args) {
Plugin p = new ThirdParty();
System.out.println(p.getClass().getSimpleName());
}
}Kelas Tersegel Juga
Penyegelan tidak terbatas pada antarmuka. Sebuah sealed class abstrak bekerja dengan cara yang sama dan dapat menyimpan keadaan serta perilaku bersama.
public class Main {
sealed static abstract class Expr permits Num, Add {}
static final class Num extends Expr {
final int value;
Num(int value) { this.value = value; }
}
static final class Add extends Expr {
final Expr left, right;
Add(Expr left, Expr right) { this.left = left; this.right = right; }
}
public static void main(String[] args) {
Expr e = new Add(new Num(1), new Num(2));
System.out.println(e.getClass().getSimpleName());
}
}Modul atau Paket yang Sama
Subtipe yang diizinkan harus berada dalam modul yang sama dengan tipe tersegel, atau dalam paket yang sama jika kode tidak bersifat modular. Dengan demikian, himpunan tertutup tetap berada bersama dan dapat diverifikasi.
Penegakan oleh Kompilator
Jika suatu kelas mencoba mewarisi tipe tersegel tanpa dicantumkan dalam permits, kode tersebut tidak dapat dikompilasi. Himpunan tertutup dijamin pada waktu kompilasi.
Mengapa Ini Penting
Karena kompilator mengetahui setiap subtipe, kompilator dapat memverifikasi bahwa switch atas tipe tersegel menangani semua kasus. Inilah dasar pencocokan pola menyeluruh yang dibahas dalam kursus berikutnya.
Hierarki Lengkap
Berikut hierarki tertutup kecil yang digunakan sebagai model nilai.
public class Main {
sealed interface Json permits JsonNull, JsonNumber, JsonString {}
record JsonNull() implements Json {}
record JsonNumber(double value) implements Json {}
record JsonString(String value) implements Json {}
public static void main(String[] args) {
Json[] values = { new JsonNull(), new JsonNumber(3.5), new JsonString("hi") };
for (Json j : values) {
System.out.println(j);
}
}
}Pemeriksaan Singkat
Ujilah pemahaman Anda tentang deklarasi tipe tersegel.
Rangkuman
Anda telah mempelajari cara mendeklarasikan tipe tersegel.
sealedmembatasi pihak yang boleh mewarisi atau mengimplementasikan suatu tipe.- Klausa
permitsmencantumkan subtipe yang diizinkan. - Setiap subtipe harus berupa
final,sealed, ataunon-sealed. - Subtipe berada dalam modul atau paket yang sama dan penegakannya dilakukan oleh kompilator.
Pertanyaan yang Sering Diajukan
Apakah pelajaran “Mendeklarasikan Tipe Sealed” gratis?
Ya — teks lengkap “Mendeklarasikan Tipe Sealed” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus Java Academy, upgrade ke CoddyKit PRO. Kursus Java Academy mencakup 4 pelajaran total.
Apa yang akan aku pelajari di “Mendeklarasikan Tipe Sealed”?
Batasi pihak yang dapat memperluas suatu tipe. Kamu berlatih Java Academy dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.
Apakah aku perlu pengalaman untuk memulai Java Academy?
Tidak diperlukan pengalaman sebelumnya. Java Academy di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 1 dari 4.
Berapa lama pelajaran “Mendeklarasikan Tipe Sealed” memakan waktu?
Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.
Bisakah aku menulis dan menjalankan kode dalam pelajaran Java Academy ini?
Ya. Setiap pelajaran Java Academy menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.
Semua pelajaran dalam kursus ini
- Mendeklarasikan Tipe Sealed
- Klausa permits
- Sealed dengan Record
- switch Menyeluruh pada Sealed