java中类的私有变量是不可访问的

java中类的私有变量是不可访问的,第1张

如果单纯说不可以直接访问,是正确的,但是是可以通过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++中对象调用私有变量的问题、如何让一个类可以访问到另一个类的私有变量等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/9620636.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-30
下一篇2023-04-30

发表评论

登录后才能评论

评论列表(0条)

    保存