2011-01-25 24 views
1

嗨我想在C++中的朋友函數的線上實現一個方法。如果不是這樣,爲什麼java不需要它?請建議如何實現它。如在示例中:對java中存在的朋友函數行做任何事情?

public class A {//some variables and methods..private and protected to be used by methods in Class B} 
public class B {} 
+1

Java中沒有朋友功能。但是如果你提供一個用例,就必須有一個解決方法。順便說一句,我不喜歡我的「朋友」可以訪問我的「私人」成員。 (雙關意圖) – Nishant

+0

可能的重複:http://stackoverflow.com/questions/4647599/why-friend-directive-is-missing-in-java/4647901 –

+0

沒有它的不重複。我問一種方法來實現它代碼 – garima

回答

2

是的,確實存在某些東西。在同一個包中聲明的Java類可以訪問它們的包組件,而不是私有成員。

這是Java和C++真正分歧的地方之一,你需要對Java方法有一個特定的理解,以避免在腳中自我射擊。

+0

無法訪問私人會員。他們可以嗎? – Nishant

+0

@Nishant,他們不能,但還有另外一件事:嵌套和內部類可以訪問私有成員直到最高級別的類。 –

+2

@Sergey Tachenov我同意。而且,使用'friend'修飾符在C++中沒有任何事情可以做到,使用_something else_無法在Java中完成。我在這裏指出的是,在Java中,沒有一個關鍵字或機制可以爲您提供C++的「friend」提供的完整功能。您需要根據您正在處理的用例來選擇工具(如此答案中建議的工具或內部類或其他任何工具)。 – Nishant

0

在C++中有一個朋友實際上違反了OO設計原則。它是一個方便,但如果你是迂腐它不正確的方式。

在Java中更好的方法是在上面的帖子中建議的,即具有內部類或使它們在相同的包中。

希望有所幫助。

+3

我不同意,就像我不同意在Java中過度使用類使得它比其他語言更加面向對象。特別是,'java.utils.Collections'與C庫一樣是面向對象的 - 沒有任何常規功能。在「朋友」的情況下,他們可以幫助實現面向對象的所有講道。想到的第一個例子是引用計數智能指針和弱指針。它們是相關的類,它們需要訪問相同的內部引用計數類型(以及構造過程中的指針) –

+1

如果不使用「friend」,您將不得不打開對內部類型的訪問並指向更多代碼。如果你有興趣,我們可以討論如何實現'shared_ptr'和'weak_ptr',爲什麼他們需要訪問彼此的細節,以及如何不使用'friend'可以訪問更大的代碼庫。 –