class A
{
private int aa = 1;
}
class B : A
{
private int bb = 5;
void DoStuff()
{
aa = bb; //Error, as it should
}
}
对战:
class A
{
private int aa = 1;
class B : A
{
private int bb = 5;
void DoStuff()
{
aa = bb; //Not an error, bummer
}
}
}
相同的东西,只是组织不同。我正在使用第二种组织我的类的方法,因为在我正在做的事情中继承类内部看起来更清晰。我的问题是,在上面的例子中,我不希望A的私有成员可以访问B,即使它在A内部。我开始明白这是系统地做到这一点,但我真的被迫如果我希望A的私人成员是B私人成员,请将他们分开吗?
答案 0 :(得分:6)
是的,如果您不希望B
访问A
的私有成员,您真的被迫将声明分开,因为嵌套类可以访问其包含类私有成员。 / p>
答案 1 :(得分:4)
你不能这样做。
嵌套类是类成员,就像方法一样。所有班级成员都可以看到其他成员,甚至是私人。正如您可以从方法中看到私有字段。
如果你想这样做,这可能意味着你的嵌套类不应该首先嵌套。
答案 2 :(得分:2)
如果我想让A的私人成员从B私下来,我真的被迫将他们分开吗?
嵌套类型可以访问其包含类型可访问的所有成员。它可以访问包含类型的私有和受保护成员,包括任何继承的受保护成员。
为什么这很重要?由于您可以控制B
中的内容,如果您不希望B
使用A
中的任何内容,则不会使用。
答案 3 :(得分:0)
这里的所有其他答案都是正确的,提到你无法完成你想要做的事情,如果你嵌套你的类而不是使用单独的声明和继承。
您应该检查的一件事是您正在做的事情背后的真实设计,并指导您选择哪种设计方法。
如果您不打算让任何外部类访问Class B
并且Class A
中严格要求其功能,则无法(并且不需要)隐藏成员来自A
的{{1}}因为B
在这种情况下 实际上是B
的成员,具有与该类中的方法相同的访问权限
如果您打算将此类暴露给其他潜在的类,那么设计(不是代码清洁/组织问题)应该引导您进入第一种方法并将声明分开。