gpt4 book ai didi

java - 如何在 Java 中使用私有(private)方法

转载 作者:搜寻专家 更新时间:2023-10-31 08:08:33 26 4
gpt4 key购买 nike

我得到一个类,它有一个私有(private)方法,比如 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)
}

最佳答案

最佳和最有帮助的答案取决于问题的上下文,我认为这并不完全显而易见。

如果问题是关于 private 的预期含义的新手问题,那么答案“否”是完全合适的。即:

  • A 的私有(private)成员只能在 A 类中访问
  • A 的包私有(private)成员只能在 A 包的类中访问
  • A 的 protected 成员只能在 A 的包中的类和 A 的子类中访问
  • A 的公共(public)成员在 A 可见的任何地方都可以访问。

现在,如果,好吧,也许这是一个延伸(谢谢 Brian :)),这个问题来自一个更“高级”的上下文,其中一个人正在研究“我know private 意思是 private but is there a language loophole”,那么,好吧,这样的漏洞。它是这样的:

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

当然,这真的不是应用程序程序员会做的事情。但这样的事情可以做是值得知道的,而不是应该被忽视的。恕我直言。

关于java - 如何在 Java 中使用私有(private)方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7694989/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com