让我们假设我有一家玩具店。我有一个网页可以买到这些玩具。每个玩具都有其自身的功能,但是代表一个人类玩具,我有一个名为HumanToy的类,具有一些高度,重量等属性。...但是我有一个嵌套的属性,它本身就是一个名为HumanLegs的JavaBean,并且该类具有其自身的功能,例如:
public class HumanToy{
private Double height;
private Double weight;
private HumanLegs humanLegs;
private class HumanLegs{
private Double height;
private Double weight;
}
我的问题是:
谢谢
答案 0 :(得分:3)
是的,这是有道理的,因为HumanLegs
一直引用他的外部类。
如果将HumanLegs
的实例移动到HumanToy
的另一个实例,则原始HumanToy
不会被删除,因为HumanLegs
确实保留了对它的引用。
因此,外部类在内存中的保存时间至少与内部类的所有实例一样长。
答案 1 :(得分:0)
非静态成员类会导致性能下降,并使代码更难以理解。与其他编程语言功能一样,仅应在必要时使用它们。这意味着,如果您可以安排设计,而无需HumanLegs
实例导航到HumanToy
的相应封闭实例,那么最好将HumanLegs
声明为静态成员类。
此直觉被有效Java(第三版)中的第24条捕获:
如果您声明不需要访问封闭实例的成员类,则总是将
static
修饰符放在其声明中。
这与问题中提到的存在问题是分开的。通过将HumanLegs
声明为私有,HumanToy
的声明可以控制HumanLegs
的实例不在HumanToy
实例的上下文之外创建。