我得到一个具有私有方法的类,例如setCoors(int x,int y)。该类的构造函数也包含setCoors。在另一个类中,我想要一个调用setCoors的方法setLocation。这可能吗?
新问题:
如果我不允许将方法设置为公开,这可能吗?
public class Coordinate{
public Coordinate(int a, int b){
setCoors(a,b)
}
private void setCoords(int x, int y)
}
public class Location{
private Coordinate loc;
public void setLocation(int a, int b)
loc = new Coordinate(a,b)
}
答案 0 :(得分:5)
最好和最有帮助的答案取决于问题的背景,我相信,这并非完全明显。
如果问题是关于私人的意图含义的新手问题,那么答案“否”是完全合适的。那就是:
现在, if ,好吧也许这是一段时间(谢谢Brian :)),问题来自一个更“高级”的背景,其中一个人正在研究“我是知道私人意味着私人,但是有一个语言漏洞“,那么,那么,是这样的漏洞。它是这样的:
import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.util.Arrays;
import java.util.List;
class C {
private int x = 10;
private void hello() {System.out.println("Well hello there");}
}
public class PrivateAccessDemo {
public static void main(String[] args) throws Exception {
C c = new C();
List<Field> fields = Arrays.asList(C.class.getDeclaredFields());
for (Field f: fields) {
f.setAccessible(true);
System.out.println(f.getName() + " = " + f.get(c));
}
List<Method> methods = Arrays.asList(C.class.getDeclaredMethods());
for (Method m: methods) {
m.setAccessible(true);
m.invoke(c);
}
}
}
输出:
x = 10
Well hello there
当然,这确实不是应用程序员所做的事情。但事实上可以完成这样的事情值得知道,而不是应该忽略的事情。恕我直言。
答案 1 :(得分:4)
private
表示私有
如果你想要其他课程来调用它,也许你不应该把它变成私有的?
答案 2 :(得分:4)
不,private
表示该方法只能在定义它的类中调用。您可能希望setLocation
创建一个新的setCoords
类实例,或者更改setCoords
上的可见性。
编辑:您发布的代码将有效。请注意,Location
类的任何实例都将绑定到其自己的Coordinate
对象。如果在代码中的其他位置创建新的Coordinate
对象,则无法修改其内部状态。换句话说,行
Coordinate myCoord = new Coordinate(4, 5);
将创建永远具有坐标myCoord
和4
的对象5
。
答案 3 :(得分:3)
无法在定义它们的类之外访问private
个方法
答案 4 :(得分:2)
setCoors
方法不应该采用int参数。它应该需要两个SilverBullet
个对象。
答案 5 :(得分:1)
private
表示您只能在定义的类中访问它。