2011-01-25 5 views
1

こんにちは私は、C++のfriend関数の行にメソッドを実装したいと思います。どのように私はそれについて移動することができ、それがない場合は、なぜ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++が実際に分岐する場所の1つで、足で自分を守るためにJavaの方法を具体的に理解する必要があります。

+0

プライベートメンバーにアクセスできません。彼らはできますか? – Nishant

+0

@Nishant、それはできませんが、別のことがあります。入れ子にされたクラスと内部クラスは、最上位のレベルクラスまでプライベートメンバーにアクセスできます。 –

+2

@ Sergey Tachenov私は同意します。そして、 'friend'修飾子を使ってC++で行うことはできません。_something else_を使ってJavaで行うことはできません。私がここで指しているのは、Javaでは、C++の「友人」が提供する完全な機能を提供する単一のキーワードまたはメカニズムがないということです。あなたは、扱っているユースケースに基づいて(この答えや内部クラスなどで提案されているような)ツールを選択する必要があります。 – Nishant

0

C++の友人は実際にOO Designプリンシパルに違反しています。それは納得ですが、あなたが正しい方法ではなく、それを賢明にしているならば。

Javaでのよりよいやり方は、上記の投稿に示唆されているように、つまり内部クラスを持つか、同じパッケージにすることです。

希望に役立ちます。

+3

私は、Javaでのクラスの過度の使用が他の言語よりもオブジェクト指向になっていると私が反対するのと同じように、私は同意しません。特に、 'java.utils.Collections'は、Cライブラリのようなオブジェクト指向の機能と同じです。 「友人」の場合、OOが説くすべてのものを達成するのに役立ちます。最初の例は、参照されたスマート・ポインタと弱いポインタをカウントすることです。それらは関連するクラスであり、同じ内部*参照カウント*タイプ(および構築中のポインタ)にアクセスする必要があります。 –

+1

'friend'を使用しないと、内部型へのアクセスとより多くのコードへのポインタを開く必要があります。興味があれば、 'shared_ptr'と' weak_ptr'がどのように実装されているのか、なぜ彼らはお互いの詳細にアクセスする必要があり、 'friend'を使わない方がより大きいコードベースにアクセスできるのかについて議論できます。 –

関連する問題