Java 仅对拥有对象的类的公共访问

Java 仅对拥有对象的类的公共访问,java,c++,Java,C++,我一直在想。我有一个顶点类,它是一般图类的一部分。该顶点类拥有一个作为实体的对象。在我的系统中,一切都是通过顶点发生的,你不能直接用getter访问实体对象。我意识到我必须在实体类中创建公共方法,以便可以从Vertex类调用它们。有没有办法只向拥有所述对象的类公开方法 因为现在我可以实例化一个实体并使用它的公共方法,但在Vertex类之外就没有意义了。我不知道是否有一种模式或者人们所做的事情只允许所有者使用他们持有的任何东西的方法 我现在使用java,C++也很好。我相信C++可以使用朋友关键词

我一直在想。我有一个顶点类,它是一般图类的一部分。该顶点类拥有一个作为实体的对象。在我的系统中,一切都是通过顶点发生的,你不能直接用getter访问实体对象。我意识到我必须在实体类中创建公共方法,以便可以从Vertex类调用它们。有没有办法只向拥有所述对象的类公开方法

因为现在我可以实例化一个实体并使用它的公共方法,但在Vertex类之外就没有意义了。我不知道是否有一种模式或者人们所做的事情只允许所有者使用他们持有的任何东西的方法

我现在使用java,C++也很好。我相信C++可以使用朋友关键词。p>
//Vertex.java
public class Vertex
{
    private NodeDrawable _node;
    ...
}

//NodeDrawable.java
public class NodeDrawable 
{
    private disable();
}

我想让Vertex成为唯一允许访问NodeDrawable方法的类。内部类很酷,但我不喜欢在一个文件中包含多个类

一个人应该对对象及其元素具有最低限度的访问权限。如果您不需要访问实体,并且仅通过Vertex访问实体是有意义的,请将所有对象句柄和方法设置为Vertex中的私有对象。

首先,我会问自己是否可以公开实体类。在此之后,您可以将Entities方法设置为私有,您的Vertex类仍然可以访问它们,而其他所有人都不能访问它们-与受保护的方法相比,受保护的方法可以由同一源代码包中的类访问

编辑


java java,你必须选择Java修改的访问修改器,Java不能让你指定一个朋友类——Java的方式是内部类。

我想你想的是用java模拟C++朋友修改器来查看这个问题。希望有帮助。

您可以使用内部类。内部类可以访问其包含类的变量和方法,反之亦然。如果只希望外部类访问内部类,可以将内部类设为私有。那么,即使是同一个包中的其他类也不能调用Outer.internal,或者在您的情况下调用Vertex.Entity。请参见docs.oracle.com/javase/tutorial/java/javaOO/nested.html

您可以使用受保护的方法,这些方法只允许从子类访问。不确定这是否是您想要的。您能发布一些代码,至少只是一个大纲,以便我们可以看到类结构吗?只看描述,,我很难想象你正在尝试做什么。我已经扩展了我的问题。你必须从Java的可能性中选择访问修饰符,Java不能让你指定一个friend类-Java的方法是内部类。@Smutje如果你编辑你的主要答案,我会接受它的可见性。你怎么能如果顶点类访问实体方法声明为私有,则可以使用它们。这里并没有涉及继承。似乎我误解了——我想,实体是顶点的一个内部类。