
如果单纯说不可以直接访问,是正确的,但是是可以通过set和get方式进行私有变量的赋值和读取的。
可以创建 一个这个类的对象,然后通过对象私有变量来调用。
比如 public A{
private String x;
public String getx(){
thisx= x;
};
}
之后就可以在B对象中通过get方法来获取A对象的私有变量的值了
public B{
A a = new A();
asetx("zhangsan");
String result = agetx();
}
这个和变量私有与否没关系,你如果仔细看错误提示的话,它会提示不能调用非const成员函数。
void setfunc(const ConstructFunc & a){j=agetfunc();}
你这里传进来的参数a是const的,这样只能调用a的const成员函数。
解决办法很简单,将:
int getfunc(){return j;}
改为
int getfunc() const {return j;}
即可。
至于拷贝构造函数为什么能访问另一个对象的私有变量,这是因为另一个对象也和自己是同一个类型的,一个类是自己的友元。
在另一个类的属性里面获取。
比如说:你现在有A类,想要获取B类的name字段的值,可以在B类中写一个这样的属性。
public string GetName{
get
{
return name;
}
}
package reflection;
import javalangreflectField;
import javalangreflectMethod;
/
该类主要练习使用java的反射机制调用其他类的
private方法和变量;
/
public class MethodTest
{
public static void main(String[] args) throws Exception
{
Class<> classType = Peopleclass;
People p1 =(People) classTypenewInstance();
// 获取指定的方法,调用People类的私有方法;
Method method = classTypegetDeclaredMethod("sayHello",
new Class[] { Stringclass });
methodsetAccessible(true);//压制java的访问修饰符;
methodinvoke(p1, new Object[]{"Mr zhou"});
//获取People类的私有属性;
Field field = classTypegetDeclaredField("age");
fieldsetAccessible(true);
fieldset(p1, 12);
Systemoutprintln(fieldget(p1));
}
}
class People
{
private int age;
private String name;
public int getAge()
{
return age;
}
public void setAge(int age)
{
thisage = age;
}
public String getName()
{
return name;
}
public void setName(String name)
{
thisname = name;
}
private void sayHello(String str)
{
Systemoutprintln("Hello: " + str);
}
}
以上就是关于java中类的私有变量是不可访问的全部的内容,包括:java中类的私有变量是不可访问的、c++中对象调用私有变量的问题、如何让一个类可以访问到另一个类的私有变量等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)