图中①和②这两处不理解是什么意思?
最近在看内部类,书中提到这点“这并不意味着每个TalkingClock都有一个TimePrinter实例域",实例域我知道就是类似"private String name"这样,但是书中说
1)“这并不意味着每个TalkingClock都有一个TimePrinter实例域”这句话是为什么要这样说呢?
2)TimePrinter对象是由TalkingClock类的方法构造,这就话又怎么理解呢?
1 TalkClock类里只是声明了一个内部类,lrc并没有声明任何成员变量为该类型并且new该类型,也就是说只是定义了一个类,并没有在自己创建对象的时候使用这个类,所以创建TalkClock对象时并不会创建该内部类的实例,也就不存在该内部类实例域。
2 这里应该是作者的代码不全,内部类可能是在TalkClock的方法里有使用,比如在start方法里使用了内部类并创建了该内部类的对象。所以就有 在外部类的方法里构建内部类对象一说。这一点不是必须的,定义一种类型,并不一定自己要使用该类型,也可以给第三方使用,只要是public。
另外提一下,内部类有静态和非静态之分,非静态依赖于外部类的实例。这个怎么理解,lz可以试试在静态方法里去创建非静态类对象,应该就能明白了。
第1点楼上解释的很清楚了,我就不多说了。谈谈自己对第2点的理解。
TimePrinter对象是由TalkingClock类的方法构造这句话应该是说,TimePrinter是类似类方法的形式创建的,所以可以使用TalkingClock类声明过的类变量。