C++でクラスを継承しながら、ユーザーは次のようなアクセス指定子を指定できます。
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.
};
しかし、Javaでは同じことはできません。つまり、Javaで拡張すると、C++の「パブリック」継承のようになります。
誰かがこの理由を説明できますか?
プライベート/保護された継承がもたらすメリットのほとんどは、カプセル化によって簡単に実現できます。 Thomas Eding は、プライベート/保護された継承を追加することで簡単にできるケースの良い例をいくつか提供していますこれらは有効なケースであり、プライベート/保護された継承を必要とせず、より「慣用的」な回避策が存在します(少なくともJava))。
Java言語の開発者は、プライベート/保護された継承(多重継承を含む)をサポートするために必要な複雑さのコストが、それが提供するメリットを上回ると明らかに感じました。
Javaには多重継承がなく、すべてをObject
から(パブリックに)継承する必要があるため、Javaまたは保護された継承は有効なプログラムを生成します。