Seperti yang dinyatakan oleh orang lain, variabel pribadi baik untuk menghindari kesalahan penggunaan yang mengarahkan objek ke status yang tidak konsisten dan sulit untuk melacak bug dan pengecualian yang tidak terduga.
Namun di sisi lain, yang paling sering diabaikan oleh yang lain adalah tentang bidang yang dilindungi.
Sub-kelas yang diperluas akan memiliki akses penuh ke bidang yang dilindungi, menjadikan objek itu rapuh seolah-olah bidang tersebut bersifat publik, tetapi kerapuhan itu terbatas pada kelas yang diperluas itu sendiri (kecuali jika itu membuka bidang tersebut lebih jauh lagi).
Jadi, bidang publik sulit untuk dianggap baik, dan sampai saat ini satu-satunya alasan untuk menggunakannya adalah untuk kelas yang digunakan sebagai parameter konfigurasi (kelas yang sangat sederhana dengan banyak bidang dan tanpa logika, sehingga kelas dilewatkan sebagai parameter saja untuk beberapa metode).
Namun di sisi lain, bidang pribadi menurunkan fleksibilitas kode Anda kepada pengguna lain.
Fleksibilitas vs Masalah, pro dan kontra:
Objek yang dipakai oleh kode Anda di kelas vanilla dengan bidang yang dilindungi aman dan merupakan tanggung jawab Anda sepenuhnya.
Di sisi lain, objek yang memperluas kelas Anda dengan bidang yang dilindungi, dipakai oleh pengguna kode Anda, adalah tanggung jawab mereka, bukan milik Anda.
Jadi, bidang / metode yang tidak terdokumentasi dengan baik, atau jika pengguna tidak benar-benar memahami bagaimana bidang dan metode tersebut harus digunakan, memiliki peluang bagus untuk menyebabkan masalah yang tidak perlu bagi diri mereka dan Anda.
Di sisi lain, menjadikan sebagian besar hal pribadi akan menurunkan fleksibilitas pengguna, dan bahkan mungkin menyisihkan mereka mencari alternatif yang dikelola, karena mereka mungkin tidak ingin membuat dan memelihara garpu hanya untuk membuat hal-hal terjadi sesuai keinginan mereka.
Jadi, keseimbangan yang baik antara pribadi, dilindungi, dan publik adalah yang terpenting.
Sekarang, untuk memutuskan antara pribadi dan dilindungi adalah masalah sebenarnya.
Kapan menggunakan dilindungi?
Setiap kali Anda memahami suatu bidang bisa sangat fleksibel, itu harus dikodekan sebagai dilindungi. Fleksibilitas itu adalah: dari menjadi nol (di mana nol selalu diperiksa dan dikenali sebagai status yang valid tanpa melempar pengecualian), hingga memiliki kendala sebelum digunakan oleh mantan kelas Anda. > = 0, <100 dll, dan secara otomatis diperbaiki untuk nilai over / under-flowed, melemparkan paling banyak pesan peringatan.
Jadi, untuk bidang yang dilindungi tersebut, Anda dapat membuat pengambil dan hanya menggunakannya (alih-alih langsung menggunakan variabel bidang), sementara pengguna lain mungkin tidak menggunakannya, jika mereka menginginkan lebih banyak fleksibilitas untuk kode spesifik mereka, dalam contoh saya bisa seperti : jika mereka ingin nilai negatif berfungsi dengan baik di kelas mereka.