2009-10-11 36 views
2

请重新标记这个问题,包括与它相关的什么时候应该使用嵌套类的示例?

所以我的Java书对嵌套类一整章的语言,但你应该只有真正使用它们的音符结束了,当说到“造型组成关系和实现你想隐藏的课程的内部“。所以让我们来讨论一下你想要使用嵌套类和一些例子。

+0

备注:有一篇关于Sun对微软引入MS Java代表的回应的有趣文章(无链接,抱歉)。它的要点是嵌套班比代表做得更好。这是导致Sun起诉MS并最终导致.Net和C#的问题之一...(我想这也总结了我关于嵌套类的感受 - 没有什么好的可以从他们中诞生出来。:-)) – 2009-10-11 00:46:25

+0

可能的重复[为什么/什么时候应该在.net中使用嵌套类?或者你不应该?](http://stackoverflow.com/questions/48872/why-when-should-you-use-nested-classes-in-net-or-shouldnt-you) – nawfal 2013-04-18 20:46:32

回答

3

嵌套/内部类只是一个专门用于另一个类的上下文的类,它没有它自己的类文件。如果它链接到一个实例,它只能在父类实例的上下文中实例化;它可以看到私人数据,或者只有私人静态数据,如果它是静态类。

Java开发者站点有一个嵌套类教程一个示例: http://java.sun.com/docs/books/tutorial/java/javaOO/nested.html

使用的几个例子:

  • 隐藏的具体实现的 接口的:

(考虑像Hibernate这样的工具的数据库会话):假设你有一个Session接口,并且SessionFactory返回一个Sessio的实例ñ。实现Session接口的SessionImpl具体类可以是知道如何构建和初始化它的工厂的内部类。

  • 供应信息通过实现 接口:

在检票Web框架,各GUI部件具有相关联的“模型”,其任务是将数据线连接到组件。界面如下所示:

public interface IModel extends IDetachable { 
public Object getObject(); 
public Object setObject(); 
} 

假设您有一些特殊的逻辑来检索您编写的自定义GUI组件的数据。由于没有其他组件以相同的方式检索数据,因此可以在提供IModel的位置使用匿名类来处理数据检索。如果你需要重用你的IModel实现的同一个类中有另一个点,你可以把它作为一个内部类。之后,如果您需要其他模型,则可以将其转换为顶级类。

通常,在需要类定义的情况下使用内部类,但该类仅在父类的上下文中可用或者仅有意义。

3

我对嵌套类的实际使用情况是在全局设置对象中。

父类是一个Singleton,嵌套类作为设置类别。

  • 设置
    • 文件设置
    • 打印设置
    • 等等

有在做内部对象作为单独的类,因为它们是没有真正的点在设置类范围之外不使用它们。

2

我使用嵌套类来封装算法,这些算法通常会作为一个有很多参数的方法来完成。我使用具有原始数据的类,并将算法放入嵌套类的单独文件中(使用partial关键字)。通过这种方式,我可以在算法完成后为该算法和其(工作)数据生成属性。 我知道,没有嵌套类可以很容易地完成,但这种感觉是正确的,因为算法是故意为父类构建的。

public partial class Network 
    { 
      partial void initFDLF() 
      { 
       fdlf=new FDLF(this); 
      } 

     public FDLF fdlf; 
     public class FDLF 
     { 
      internal bool changed=true; 
      internal bool pvchange=true; 
      public double epsilon = 0.001; 
      public bool fdlfOk=false; 
      public void init(){...} 
      public void run(){...} 
      ... 
+0

这个问题有一个“语言不可知“标签,部分类只存在于.net中 – 2014-03-08 23:56:51

相关问题