Java 访问成员类的私有成员
我有一个a类,有一个私有成员int myMember。还有一个B组,有一个a组的私人成员,称为myA 即:Java 访问成员类的私有成员,java,Java,我有一个a类,有一个私有成员int myMember。还有一个B组,有一个a组的私人成员,称为myA 即: public class A{ private int myMember; ... } public class B{ private A myA; } 我希望能够访问: B.myA.myMember; 但我似乎不能,因为myMember在A中是私有的。问题是,我需要将A定义为私有的,以便进行练习(这也包括它不能被保护)。有办法解决这个问题吗 谢谢。使用ge
public class A{
private int myMember;
...
}
public class B{
private A myA;
}
我希望能够访问:
B.myA.myMember;
但我似乎不能,因为myMember在A中是私有的。问题是,我需要将A定义为私有的,以便进行练习(这也包括它不能被保护)。有办法解决这个问题吗
谢谢。使用getter:
public class A {
private int myMember;
public int getMyMember() {
return myMember;
}
public void setMyMember(int myMember) {
this.myMember = myMember;
}
}
public class B{
private A myA;
public B() {
myA = new A();
myA.setMyMember(0);
int a = myA.getMyMember();
}
}
public class A {
private int myMember;
public getMyNumber() {
return myNumber;
}
}
public class B {
private A myA;
public A getA() {
return myA;
}
}
现在您可以编写以下代码:
B b = new B();
b.getA().getMyMember();
既然您已经声明不能创建更多的公共方法,也就是getter,那么您可以使用反射
public class A{
private int myMember;
...
}
public class B{
private A myA;
private int get(){
try {
Field field = myA.getClass().getDeclaredField("myMember");
field.setAccessible(true);
return (int) field.get(myA);
catch (Exception e){
//Something went wrong, the field doesn't exist or a security exception
return null; //or return some "error number" like -10
}
}
}
如果可以将私有字段声明为静态,则可以执行以下操作:
public class A {
private int myMember;
}
public class B {
public static void main (String[] args) {
int myMember = new A() {
public int getPrivate() {
return myMember;
}
}.getPrivate();
System.out.print("\n\t Id : " + myMember);
}
}
(1) 你为什么想要直接进入现场?(2)
A
是否是私有的无关紧要;重要的是myMember
是私有的。你能改变吗?用吸气剂。使用反思。如果你的老师做了这个练习,那么他可能希望你使用反思。否则很简单,Private就是Private,您不能从外部访问它。请参阅相关问题:要么使用getter和setter,要么在现实世界中使用更好的解决方案,将需要myMember值的代码放入类a中的方法中。是的,我也想到了这一点。但公共职能的数量不能增加。我不知道,出了点事。谢谢你的回答。也许是默认范围?但是我不会使用反射,除非它是完全必要的,这可以用简单的getter解决。没错,但是他说他不能公开新的方法