Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/google-maps/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 作为外部类的一部分的内部类_Java_Inner Classes - Fatal编程技术网

Java 作为外部类的一部分的内部类

Java 作为外部类的一部分的内部类,java,inner-classes,Java,Inner Classes,假设我有一家玩具店。我有一个网页可以买到这些玩具。每个玩具都有自己的特性,但为了表示一个人类玩具,我有一个名为HumanToy的类,它有一些特性,比如身高、体重。。。。但是我有一个嵌套属性,它本身就是一个名为HumanLegs的JavaBean,这个类有自己的特性,比如: public class HumanToy { private Double height; private Double weight; private HumanLegs humanL

假设我有一家玩具店。我有一个网页可以买到这些玩具。每个玩具都有自己的特性,但为了表示一个人类玩具,我有一个名为
HumanToy
的类,它有一些特性,比如身高、体重。。。。但是我有一个嵌套属性,它本身就是一个名为
HumanLegs
的JavaBean,这个类有自己的特性,比如:

public class HumanToy {     

    private Double height;
    private Double weight;

    private HumanLegs humanLegs;

    private class HumanLegs {

        private Double height;
        private Double weight;
    }
我的问题是:


这个玩具有静态
HumanLegs
类,这有什么意义吗?我的意思是,从概念上讲,
人腿
不能单独存在,它们只能与玩具一起存在,所以我认为这是合乎逻辑的,首先是一个内部类(不是一个分离的类),其次不是静态的,因为同样的原因,我的意思是,仅实例化
HumanToy
可以获得
HumanLegs
对象,或者要获得
HumanLegs
对象,需要一个
HumanToy
对象。这是正确的想法吗?

是的,这很有意义,因为
HumanLegs
保留了对其外部类的引用。 如果将
HumanLegs
的实例移动到
HumanToy
的另一个实例,则不会删除原始
HumanToy
,因为
HumanLegs
保留了对它的引用


因此,outerclass在内存中的保存时间至少与innerclass的所有实例相同

当然,如果它们不能在你的概念化世界中分离,那么这就是正确的想法。备注:如果不需要,请不要将对象包装器用于
double
。应写入
HumanLegs
成员字段
HumanLegs
。顺便说一句,现在很多人更喜欢不可变的对象和构建器,而不是可变的bean。哦,你可以把它叫做
Legs
,我想,把它称为
HumanToy.Legs
。是的。这很有道理。如果您想在
HumanToyLeg
RobotToyLeg
之间共享代码,那么当然,他们可以自由实现/扩展
ToyLeg
接口/类不允许外部类支持它:)