当前位置: 首页 > 知识库问答 >
问题:

在Java/内部方法可见性中使用内部类为外部类创建私有记录

尉迟轶
2023-03-14

我必须在Java中实现一个名为graph 的接口。

假设mygraph > 是我编写的实现graph的类。

我想创建一个内部类节点以便“封装”e类型的元素。

public class MyGraph<E extends Comparable<E>> implements Graph<E>{


  MyGraph methods and instance variables...
  .
  .
  .



    class Node {
        E elem;
        List<E> edges;
        ...
        public Node(E e){
           this.elem = e;
           edges = null;
        }
    }
}

问题是我不明白内部类应该是node还是node public还是private以及它的实例变量应该声明为public还是private。对于我将要在node中插入的一些最终方法也是如此。

基本上,类节点应该像C语言中的记录类型(带有typedef),并且外部类应该能够访问节点的所有实例变量,而不需要观察器、getter等。

共有1个答案

仇龙光
2023-03-14

您应该将节点类声明为private static,因为它不需要访问外部类的成员。如果不这样做,每个实例都将携带对实例化实例的引用。您将需要给它一个参数来执行此操作。

如果您使用E作为参数名,它将在外部类中隐藏E,因此考虑为其提供一个不同的名称,以求清晰。您的外部类将对Node的成员具有完全访问权限,如果Node是私有的,则没有其他类具有访问权限,因此您不需要担心成员的访问级别--只需省略它们即可。

 类似资料:
  • 问题内容: 我是Java新手。 我的文件如下所示: 在另一个Java文件中,我试图创建A对象调用 但是由于某种原因我得到了错误: 有人可以解释我该怎么做吗?我的意思是,我真的需要创建的实例,然后设置实例,然后将实例提供给方法,还是有另一种方法呢? 问题答案: 在您的示例中,您有一个内部类,该内部类始终与外部类的实例绑定。 如果您想要的只是嵌套类以提高可读性而不是实例关​​联的一种方式,那么您需要一

  • 问题内容: 如果我有一个包私有的Java类(用“ class”声明,而不是“ public class”),那么将内部方法声明为public或protected或package- private确实没有区别,对吗?那么我应该使用哪个,或者什么时候该使用呢?我有点困惑。 问题答案: 如果我有一个包私有的Java类(用“ class”声明,而不是“ public class”),那么将内部方法声明为p

  • 问题内容: 最近,我遇到了一个神秘的问题,在Android项目,我描述了这里。我以某种方式解决了问题,但仍然不知道其背后的确切原因。 假设我想在内部类中调用函数foo()。问题是,直接调用它有什么区别 或使用外部类实例对其进行调用 此外,如果有人能检查我与此相关的最后一个问题,并向我提供有关错误发生原因的线索,我将不胜感激。非常感谢。 PS:我在某处读到,非静态内部类将始终持有外部类的实例。因此,

  • 问题内容: 考虑以下情况: 从Eclipse中的警告中,我引用:Java编译器通过合成访问器方法模拟构造函数AB()。我想编译器现在可以继续进行,并为B创建一个额外的“水下”构造函数。 我觉得这很奇怪:为什么类B在A的ako字段中不可见?并且:这是否意味着B类在运行时不再是私有的?并且:为什么B类的protected关键字表现不同? 问题答案: 内部类本质上是Java 1.1中引入的一种hack。

  • 问题内容: 我观察到外部类可以访问内部类的私有实例变量。这怎么可能?这是演示相同代码的示例代码: 为什么允许这种行为? 问题答案: 内部类只是一种将真正属于原始外部类的功能完全分开的方法。当你有两个要求时,可以使用它们: 如果是在单独的类中实现的,那么外部类中的某些功能将最为清晰。 即使在单独的类中,该功能也与外部类的工作方式紧密相关。 鉴于这些要求,内部类可以完全访问其外部类。由于它们基本上是外

  • 我是Java新手。 我的文件看起来像这样: 在另一个java文件中,我试图创建一个调用 但由于某种原因,我得到了一个错误: 有人能解释一下我怎么做我想做的事吗?我的意思是,我真的需要创建的实例,然后将其设置为,然后将的实例赋给该方法吗,还是有其他方法可以做到这一点?