當前位置:首頁 » 密碼管理 » 訪問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
保護,加上這個修飾的類或屬性,只能在類和同包訪問,別的包不能訪問

熱點內容
運營為什麼區分ios和安卓 發布:2025-05-15 03:30:02 瀏覽:628
主播網站源碼 發布:2025-05-15 02:50:56 瀏覽:167
中文編程語言有哪些 發布:2025-05-15 02:48:59 瀏覽:536
配置中心應急流程有哪些 發布:2025-05-15 02:37:31 瀏覽:670
php宏定義 發布:2025-05-15 02:32:54 瀏覽:271
咸魚支付密碼哪裡改 發布:2025-05-15 02:32:53 瀏覽:520
存儲機箱 發布:2025-05-15 02:31:31 瀏覽:837
編程很累嗎 發布:2025-05-15 02:29:25 瀏覽:553
疫情期間訪問國外網路 發布:2025-05-15 02:24:24 瀏覽:247
我的世界網易版游戲伺服器 發布:2025-05-15 02:23:46 瀏覽:222