Salah satu hal pertama yang saya lakukan ketika saya subkelas kelas adalah mengubah banyak metode pribadi untuk dilindungi
Beberapa penalaran tentang privatevs protected metode :
privatemetode mencegah penggunaan kembali kode. Subkelas tidak dapat menggunakan kode dalam metode pribadi dan mungkin harus mengimplementasikannya lagi - atau menerapkan kembali metode yang awalnya bergantung pada metode pribadi & c.
Di sisi lain, metode apa pun yang tidak private dapat dilihat sebagai API yang disediakan oleh kelas untuk "dunia luar", dalam arti bahwa subkelas pihak ketiga juga dianggap "dunia luar", seperti yang disarankan orang lain dalam jawabannya. sudah.
Itu adalah hal yang buruk? - Kurasa tidak.
Tentu saja, API publik (pseudo-) mengunci programmer asli dan menghalangi refactoring dari antarmuka tersebut. Tetapi jika dilihat sebaliknya, mengapa seorang programmer tidak perlu mendesain sendiri "detail implementasi" dengan cara yang bersih dan stabil seperti API publiknya? Haruskah dia menggunakan privatesehingga dia bisa ceroboh tentang penataan kode "pribadi" nya? Berpikir mungkin dia bisa membersihkannya nanti, karena tidak ada yang akan memperhatikan? - Tidak.
Programmer harus memasukkan sedikit pemikiran ke dalam kode "privat" -nya juga, untuk menyusunnya sedemikian rupa sehingga memungkinkan atau bahkan mempromosikan penggunaan ulang sebanyak mungkin di tempat pertama. Maka bagian-bagian non-pribadi mungkin tidak menjadi beban di masa depan seperti beberapa ketakutan.
Banyak (framework) kode saya melihat mengadopsi penggunaan konsisten dari private: protected, metode non-final yang hampir tidak melakukan apa-apa lebih dari mendelegasikan kepada metode pribadi umumnya ditemukan. protected, metode non-final yang kontraknya hanya dapat dipenuhi melalui akses langsung ke bidang pribadi juga.
Metode-metode ini tidak dapat secara logis diganti / ditingkatkan, meskipun secara teknis tidak ada yang membuat (compiler-) jelas.
Ingin dapat diperpanjang dan diwariskan? Jangan membuat metode Anda private.
Tidak ingin perilaku kelas Anda diubah? Buat metode Anda final.
Benarkah metode Anda tidak bisa disebut di luar konteks tertentu yang terdefinisi dengan baik? Jadikan metode Anda privatedan / atau pikirkan tentang bagaimana Anda dapat membuat konteks yang ditentukan dengan baik tersedia untuk digunakan kembali melalui protectedmetode pembungkus lain .
Itu sebabnya saya menganjurkan untuk menggunakan privatehemat. Dan tidak membingungkan privatedengan final. - Jika implementasi metode sangat penting untuk kontrak umum kelas dan karenanya tidak boleh diganti / diganti, buatlah final!
Untuk bidang, privatetidak terlalu buruk. Selama bidang tersebut dapat "digunakan" secara wajar melalui metode yang sesuai (itu tidak getXX() atau setXX()!).