【发布时间】:2018-09-22 16:11:48
【问题描述】:
有没有更简单的方法来访问下面对象other 的字段n?
public class NestedVisibility
{
private int n = 42;
public static class B extends NestedVisibility {
public void foo(NestedVisibility guest) {
super.n = 0; // OK
guest.n = 0; // OK
B other = new B();
other.n = 0; // Compile-time error. Weird!
((NestedVisibility)other).n = 0; // OK
}
}
}
访问other 的私有字段比访问guest 的私有字段需要做更多的工作,这不是很奇怪吗?
【问题讨论】:
-
不那么繁琐的方法可能是不写这么奇怪的代码。
-
不,这并不奇怪。
private修饰符意味着它只能在 class 内部访问。不在 instance 内,而是在类内。这允许同一类的两个实例访问彼此的私有属性。 -
一个静态的内部类扩展了外部类,让人有些头疼。
-
你想做什么?也许我们可以帮助您提出一个不涉及内部扩展类的构造
-
@marco 你想使用封装。我提供了一个答案,解释了您的代码中发生的各种事情以及如何更改它以回答您的问题。一般来说,除非需要绕过封装,否则您不希望直接访问其他对象的值,这仍然是一个坏主意,因为有设计模式和 OOP 模式可以帮助您避免绕过它。
标签: java