Saat mewarisi kelas dalam C ++, pengguna dapat menentukan specifier akses seperti,
class Base
{
public int mem1;
protected in mem2;
};
class Derived1 : **private** Base
{
// mem1 will be private here.
// mem2 will be private here.
};
class Derived2 : **protected** Base
{
// mem1 will be protected here.
// mem2 will be protected here.
};
class Derived2 : **public** Base
{
// mem1 will be public here.
// mem2 will be protected here.
};
Tetapi hal yang sama tidak mungkin di Jawa, yaitu meluas di java selalu seperti warisan "publik" di C ++.
Bisakah seseorang menjelaskan alasannya?
java
object-oriented
inheritance
Rumit Parakhiya
sumber
sumber
Jawaban:
Sebagian besar manfaat yang diberikan warisan pribadi / dilindungi dapat Anda peroleh dengan mudah melalui enkapsulasi. Thomas Eding telah memberikan beberapa contoh kasus yang baik yang dapat dibuat lebih mudah dengan penambahan warisan pribadi / dilindungi, dan walaupun ini adalah kasus yang valid, ada solusi yang tidak memerlukan warisan pribadi / dilindungi dan lebih 'idiomatik' (di Jawa pada paling sedikit).
Para pengembang bahasa Jawa jelas merasa bahwa biaya dalam kompleksitas yang diperlukan untuk mendukung warisan pribadi / dilindungi (termasuk multiple inheritance) melebihi manfaat yang akan diberikannya.
sumber
B
sebagaiA
(yangB
diwarisi secara pribadi dariA
) sehingga Anda dapat secara polimorfis menggunakannya dalam beberapa metode. Dengan komposisi, ini bisa dilakukan, tetapi jauh lebih berantakan. Di sini Anda perlu membuat subclass terpisahA'
(mungkin kelas dalam) yang mengimplementasikan fungsi yang Anda gunakan. Anda juga perlu mendelegasikan perubahan secara manual keB
kelas induk (B
membuatA'
teman,A'
menerima referensi untukB
). Saya kira ini tidak terlalu sulit untuk dilakukan, tetapi membuat kode berantakan. (Lanjutan)B
mengakses variabel yang dilindungiA
, warisan pribadi lebih mudah diterapkan daripada komposisi. Dengan komposisi, Anda dapat menerapkan hal yangA'
sama seperti di atas, dan / atau meningkatkan akses variabel yang dilindungi. (3) Misalkan Anda ingin variabel anggota statis bersama tunggal yang merupakan variabel tepat yang sama di seluruh contoh template. Solusinya adalah dengan mewarisi secara pribadi dari kelas dasar non-templated yang memiliki anggota statis. Komposisi tidak dapat menyelesaikan masalah ini, meskipun teknik lain bisa (seperti berteman dengan beberapa kelas lain dengan anggota).Karena Java tidak memiliki banyak warisan dan semuanya harus (secara publik) diwarisi
Object
, tidak ada tempat di Jawa di mana warisan pribadi atau yang dilindungi akan menghasilkan program yang valid.sumber