当前位置:首页 » 密码管理 » 访问private方法

访问private方法

发布时间: 2022-10-04 06:10:41

php怎么访问对象中的private

私有属性方法在对象外不能访问,在对象内可以访问,那么你可以写一个共有public的方法,在方法里对对象里的私有属性方法采取调用就可以了。所谓私有就是避免对象外的乱改,加个方法起限制

㈡ 如果想要访问父类中的一个private成员变量有什么方法

类的封装性,一般在定义成员变量的时候定义为private,同时还会定义几个公有的方法实现对该私有成员变量进行操作的函数,这样在类就可以通过 对象名.公有方法 的方式对私有成员进行访问

java 中Private变量如何在子类中访问

子类是不能够直接访问父类中的private变量的

可行的解决方法有:

①将变量的访问权限修饰词改为public或者protected或者default(什么都不写)

②在父类中写一个public的成员方法获得private变量的值

示例代码如下:

用这种方法是比较安全的,变量控制为私有,通过get方法得到它的值,通过set方法修改它的值

㈣ 反射调用private方法实践(php、java)

单测中有个普遍性的问题,被侧类中的private方法无法直接调用。小拽在处理过程中通过反射改变方法权限,进行单测,分享一下,直接上代码。
简单被测试类
生成一个简单的被测试类,只有个private方法。
复制代码
代码如下:
<?php/**
*
崔小涣单测的基本模板。
*
*
@author
cuihuan
*
@date
2015/11/12
22:15:31
*
@version
$Revision:1.0$
**/class
MyClass
{/**
*
私有方法
*
*
@param
$params
*
@return
bool
*/private
function
privateFunc($params){if(!isset($params)){return
false;}echo
"test
success";return
$params;}}
单测代码
复制代码
代码如下:
<?php/***************************************************************************
*
*
$Id:
MyClassTest
T,v
1.0
PsCaseTest
cuihuan
Exp$
*
**************************************************************************//**
*
崔小涣单测的基本模板。
*
*
@author
cuihuan
*
@date
2015/11/12
22:09:31
*
@version
$Revision:1.0$
**/require_once
('./MyClass.php');class
MyClassTest
extends
PHPUnit_Framework_TestCase
{const
CLASS_NAME
=
'MyClass';const
FAIL
=
'fail';protected
$objMyClass;/**
*
@brief
setup:
Sets
up
the
fixture,
for
example,
opens
a
network
connection.
*
*
可以看做phpunit的构造函数
*/public
function
setup()
{date_default_timezone_set('PRC');$this->objMyClass
=
new
MyClass();}/**
*
利用反射,对类中的private

protect
方法进行单元测试
*
*
@param
$strMethodName
string
:反射函数名
*
@return
ReflectionMethod
obj
:回调对象
*/protected
static
function
getPrivateMethod($strMethodName)
{$objReflectClass
=
new
ReflectionClass(self::CLASS_NAME);$method
=
$objReflectClass->getMethod($strMethodName);$method->setAccessible(true);return
$method;}/**
*
@brief
:测试private函数的调用
*/public
function
testPrivateFunc(){$testCase
=
'just
a
test
string';//
反射该类$testFunc
=
self::getPrivateMethod('privateFunc');$res
=
$testFunc->invokeArgs($this->objMyClass,
array($testCase));$this->assertEquals($testCase,
$res);$this->expectOutputRegex('/success/i');//
捕获没有参数异常测试try
{
$testFunc->invokeArgs($this->transfer2Pscase,
array());}
catch
(Exception
$expected)
{$this->assertNotNull($expected);return
true;}$this->fail(self::FAIL);}}
运行结果
cuihuan:test
cuixiaohuan$
phpunit
MyClassTest.php
PHPUnit
4.8.6
by
Sebastian
Bergmann
and
contributors.Time:
103
ms,
Memory:
11.75MbOK
(1
test,
3
assertions)
关键代码分析
封装了一个,被测类方法的反射调用;同时,返回方法之前处理方法的接入权限为true,便可以访问private的函数方法。
复制代码
代码如下:
/**
*
利用反射,对类中的private

protect
方法进行单元测试
*
*
@param
$strMethodName
string
:反射函数名
*
@return
ReflectionMethod
obj
:回调对象
*/protected
static
function
getPrivateMethod($strMethodName)
{$objReflectClass
=
new
ReflectionClass(self::CLASS_NAME);$method
=
$objReflectClass->getMethod($strMethodName);$method->setAccessible(true);return
$method;}
下面给大家分享java中利用反射调用另一类的private方法
我们知道,Java应用程序不能访问持久化类的private方法,但Hibernate没有这个限制,它能够访问各种级别的方法,如private,
default,
protected,
public.
Hibernate是如何实现该功能的呢?答案是利用JAVA的反射机制,如下:
<span
style="font-size:14px;">import
java.lang.reflect.InvocationTargetException;
import
java.lang.reflect.Method;
public
class
ReflectDemo
{
public
static
void
main(String[]
args)
throws
Exception
{
Method
method
=
PackageClazz.class.getDeclaredMethod("privilegedMethod",
new
Class[]{String.class,String.class});
method.setAccessible(true);
method.invoke(new
PackageClazz(),
"452345234","q31234132");
}
}
class
PackageClazz
{
private
void
privilegedMethod(String
invokerName,String
adb)
{
System.out.println("---"+invokerName+"----"+adb);
}
}</span>
输出结果为:---452345234----q31234132

㈤ java反射调用private方法

Java程序不能访问持久化类的private方法,但是利用JAVA的反射机制可以实现调用,代码如下:

<spanstyle="font-size:14px;">
importjava.lang.reflect.InvocationTargetException;
importjava.lang.reflect.Method;
publicclassReflectDemo{
publicstaticvoidmain(String[]args)throwsException{
Methodmethod=PackageClazz.class.getDeclaredMethod("privilegedMethod",newClass[]{String.class,String.class});
method.setAccessible(true);
method.invoke(newPackageClazz(),"452345234","q31234132");
}
}
classPackageClazz{
privatevoidprivilegedMethod(StringinvokerName,Stringadb){
System.out.println("---"+invokerName+"----"+adb);
}
}
</span>
#程序输出结果为:---452345234----q31234132

㈥ java 一个类调用另一个类的private方法

Java调用private方法利用的是Java中的类反射机制 。
定义一个class,定义一个内部private方法:
public class PrivateTest {
private void print() {
System.out.println("this is a private method");
}
}
再定义一个class去访问刚才定义的private方法,也就是print()如下
import java.lang.reflect.Method;

public class PrivateTest2 {
public static void main(String[] args) {
try {
Method method = PrivateTest.class.getDeclaredMethod("print", new Class[]{});
method.setAccessible(true);
Method.invoke(new PrivateTest(), new Object[] {});
} catch (Exception ex) {
System.out.println(ex.toString());
}
}
}
利用java的反射机制,即使是private方法,也可以被调用使用。

㈦ 如何访问类中的private成员变量

总所周知,类中的private属性的成员变量在类外是无法访问的,今天我们探讨的就是如何在类外访问private属性的成员变量。

我们先来看一个简单的例子:

class STU
{
public:
STU()
{
x = 5;
y = 10;
}
private:
int x;
int y;
};

int main()
{
STU t;
int*p = (int*)&t + 1;
return 0;
}

通过上面的代码我们可以知道,方法是把类对象的地址强制转化为int*类型,因为类对象里存储的只是成员变量,所以通过对指针的操作可以访问到private类型的成员变量。

接下来还有一个例子:

class STU
{
public:
STU()
{
c = 'f';
y = 10;
}
private:
char c;
int y;
};

int main()
{
STU t;
int*p = (int*)((char*)&t + 4);
cout << *p << endl;
return 0;
}

这段代码中最重要的就是int*p = (int*)((char*)&t + 4);
因为第一个数据是char类型的,所以要把对象的地址转化为char*型,对象中存在两种类型的数据,需要考虑内存对齐,所以当要访问下一个int型变量的时候,指针需要加4,而不是加1。最后要取到int型的变量,还是要把地址强转为int *。

㈧ “同一个类的不同对象可以访问对方的private成员变量或调用对方的private成员方法”这句话怎么理解

类或者对象成员可以通过访问说明符设定安全机制,其中成员包括成员变量或成员方法。

其中java支持的四种访问限制:

  1. public——所有类都可以访问

  2. private——只有本类可以访问

  3. protected——子类或者同一包的类可以访问

  4. <省略>——只允许同一包的类可以以访问

    下图是访问级别表

所以,同类的两个不同的private成员变量可以进行互访。

㈨ java private私有属性怎么在子类中访问

能被继承,只是不能通过子类访问,要通过父类的非private属性方法去访问
各个访问如下:
public
公共,加上这个修饰的类或属性,可以在同一个包或者别的包里面访问
private
私有的,加上这个修饰的类或属性,只能在同类里访问,同包和别的包不能访问
protected
保护,加上这个修饰的类或属性,只能在类和同包访问,别的包不能访问

热点内容
移动硬盘和光盘哪个存储时间长 发布:2025-05-15 07:04:25 浏览:488
压缩一定 发布:2025-05-15 06:57:30 浏览:289
进栈算法 发布:2025-05-15 06:56:02 浏览:215
安卓和缓存 发布:2025-05-15 06:56:02 浏览:428
笔记本电脑台式服务器 发布:2025-05-15 06:40:41 浏览:109
4k无压缩 发布:2025-05-15 06:02:54 浏览:75
hp存储6350 发布:2025-05-15 05:40:41 浏览:233
怎么更改电脑默认缓存位置 发布:2025-05-15 05:39:01 浏览:877
安卓qq公孙离在哪个战区战力最低 发布:2025-05-15 05:38:58 浏览:494
androidffmpeg压缩 发布:2025-05-15 05:37:02 浏览:288